Hashmap、Hashtable、Arraylist的区别
程序员文章站
2022-07-02 21:54:56
...
Array有多少元素是确定的,比如足球队上场的队员有11名,是固定的,就用array。
ArrayList是不固定的,比如用sql查询数据库,不知道有多少记录返回,用Arraylist。
Enumeration 是用来一个一个列举Collection的元素的,但java2后被Iterator替代。
Hashtable用在比如你想查中国队的10号是谁,首先put(new Interger(10),new String(“海东”)),再String name=get(new Interger(10));对于简单的key--value对来说,hashtable很有用,使用索引来取值。
HashMap/Hashtable 和 Vector/ArrayList 都是放一组对象,一个是用key object来定位element, 另一个是用index定位element.
推荐使用HashMap和ArrayList的原因一样,因为他们不是Synchronized,因为不需要obtain lock each time,它们相对快很多。Synchronized在最底层是没有意义的,在这里不想多讲。
我本人更加推荐是用LinkedList而不是 ArrayList.因为在更多的时候,我们很少真的从一个List里拿出某一个element,相对的,遍例整个List的情况最多,在这种情况下用 Iterator是最高效的。
Vector是一个一维的容器。HashTable、HashMap都是二维的。
和数组的区别是hash……不用向数组那样事先定义长度。而可以随意追加。它是key和value对应的。用key作为检索。
HashTable和Vector 都是Synchronized都是旧的Java平台的集合类,ArrayList和HashMap由于少了Synchronized的开销,速度比较快。一般不牵涉到线程之间数据共享的问题都用ArrayList和HashMap吧,当然也可以用LinkedList,用listIterator来遍历.
HashTable ,HashMap
上面两个用起来差不多,不过建议使用HashMap,因为hashtable被淘汰了
Vector,ArrayList
Vector 比 ArrayList慢,是因为vector本身是同步的,而arraylist不是
所以,没有涉及到同步的推荐用arraylist.
再谈ArrayList和LinkedList:
ArrayList的缺点是,当the underlying Array reaches the maximum capacity,一个新的双倍长的array has to be initialized,紧跟着的是Array Copy,很慢。同样,remove到1/4length时,array shrinks by creating a new shorter array and array copy all elements.所以,如果你要用的List打下常常改变,绝对不应该用ArrayList.
LinkedList的缺点是当去取某个 indexed element时,必须做一次遍历。但是,这种情况我发现在real life project里很少。
Hashtable与HashMap的区别:
1. Hashtable是基于陈旧的Dictionary的子类;HashMap是Java1.2引进的Map接口的一个实现类。
2. Hashtable中的方法是同步的,线程安全的;而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:Map Collections.synchronizedMap(Map m);使用如下:Map map=Collections.synchronizedMap(new HashMap())。这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
3. 在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。而Hashtable中不允许null值。
List和Set的区别:
1. List用来处理序列,而Set用来处理集。
2. List中的内容可以重复,而Set则不行。
上一篇: 写Java程序的三十个基本规则 做专业的Java开发者
下一篇: linux 命令记录
推荐阅读
-
Java自学-集合框架 HashMap和Hashtable的区别
-
对比Hashtable,HashMap,TreeMap,谈谈对HashMap的理解
-
HashTable与ConcurrentHashMap的区别
-
C#中数组、ArrayList、List、Dictionary的用法与区别浅析(存取数据)
-
Java集合系列(二):ArrayList、LinkedList、Vector的使用方法及区别
-
C#常见的几种集合 ArrayList,Hashtable,List
,Dictionary 遍历方法对比 -
Java自学-集合框架 ArrayList和LinkedList的区别
-
Java自学-集合框架 ArrayList和HashSet的区别
-
Java中res.add(list)和res.add(new ArrayList<Integer>(list))的区别
-
C#介绍ArrayList和List的区别(第一篇内容博客 )