在Java中ArrayList、LinkedList、HashMap的区别是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Java中ArrayList、LinkedList、HashMap的区别是啥相关的知识,希望对你有一定的参考价值。
参考技术A Collection├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
LinkedList类
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
List
list
=
Collections.synchronizedList(new
LinkedList(...));
ArrayList类
ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
和LinkedList一样,ArrayList也是非同步的(unsynchronized)。
HashMap类
HashMap继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。
总结
如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
警告在 Java 中克隆 ArrayList
【中文标题】警告在 Java 中克隆 ArrayList【英文标题】:Warning cloning ArrayList in Java 【发布时间】:2013-12-07 11:37:30 【问题描述】:public void addProductList(ArrayList<ViewOrderProduct> globalOrderProductList)
this.productOrderList = (ArrayList<ViewOrderProduct>)globalOrderProductList.clone();
这给了我警告:
类型安全:从 Object 到 ArrayList 的未经检查的强制转换
我知道我可以简单地添加@SuppressWarnings("unchecked")
来解决问题。
但我想了解问题所在。如果我添加了 suppressWarnings,我可以确定一切顺利?此警告是否有其他解决方案?
【问题讨论】:
这只是对您的警告,因为他无法在运行时验证您的克隆列表中只有ViewOrderProduct
对象。
你真的不想使用clone
方法...
@ThomasJungblut 不,clone()
返回一个Object
,因此警告是正确的,与类型擦除等无关。
@Neet 你最好重新阅读Unchecked cast
的定义;)
与clone
方法和克隆/复制相关:***.com/q/2326758/1065197、***.com/q/2156120/1065197。现在,您的问题与警告有关:***.com/q/9499908/1065197
【参考方案1】:
clone()
默认返回Object
,克隆ArrayList
的正确方法是使用适当的构造函数:
this.productOrderList = new ArrayList<ViewOrderProduct>(globalOrderProductList);
编辑:首选方法是使用适当的构造函数,而且这两种方法都只返回一个浅拷贝。
编辑:我知道没有其他方法可以使用 clone()
删除警告而不使用 SuppressWarning
。
【讨论】:
这会给你一个浅拷贝,而不是一个深度拷贝。当然,这取决于 OP 的需求。 @LuiggiMendozaclone()
on ArrayList
也返回浅拷贝。
请参阅我在 OP 的问题中发布的关于clone
方法用法的链接。
@LuiggiMendoza 好吧,OP 应该跳过整个克隆的事情。无论如何,使用 ctor 是首选方式。
简而言之,是的。但问题本身是关于使用@SuppressWarnings("unchecked")
。【参考方案2】:
arraylist 是 Object[] 的封装,里面的任何东西都存储为 Object,不管用什么构造函数,结果都是一样的。
如上所述,为避免警告您应该使用构造函数 public ArrayList(Collection c)
例如 new ArrayList(globalOrderProductList);
这将返回没有警告的内容副本。
【讨论】:
以上是关于在Java中ArrayList、LinkedList、HashMap的区别是啥的主要内容,如果未能解决你的问题,请参考以下文章