首页 > 代码库 > Java集合(二)
Java集合(二)
ArrayList, Vector, LinkedList异同
1)三者都是List接口的实现类。都属于线性数据结构。
2)ArrayList和Vector属于顺序表,逻辑顺序同物理顺序一致。内部实现都是采用可变长度数组方式存储数据,允许直接按序号索引元素。
3)Vector是java最初使用的变长数组对象,关键方法进行了线程安全控制(synchronized关键字修饰方法),通常性能上较ArrayList差。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。
4)LinkedList使用双向链表实现存储。逻辑顺序和物理顺序不一致。其内部维护一个 Entry 内部类,该 Entry对象的结构为: Entry { Entry previous; Object element; Entry next; } 其中的 Object 类型的元素 element 就是我们向 LinkedList 中所添加的元素,然后 Entry 又构造好了向前与向后的引用 previous、next
5)性能方面,当执行随机查询操作时,采用顺序结构的Vector或ArrayList 比较好。
当在数据结构中间执行插入或者删除操作时,采用链式结构的LinkedList比较好,但是对于头尾位置的元素增删操作,性能相差不大。
HashSet
1) Set接口主要实现类之一,与List接口实现的顺序结构不同,Set接口数据存储方式是离散的,并且不包含重复元素。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。
2)当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的 hash code值是否与增加的对象的 hash code值一致; 如果不一致,直接加进去;如 果一致,再进行 equals方法的比较,equals方法如果返回 true,表示对象已经加进 去了, 就不会再增加新的对象,否则加进去。
3. HashMap和Hashtable的区别
1)类似于Vector和ArrayList之间的区别,两者都是实现了同一接口(Map),都是采用类似数据存储方式维护数据的(key-value对)。HashMap是Map接口较新的实现类
2)HashMap是Hashtable的轻量级实现(非线程安全的实现)由于非线程安全,效率上可能高于Hashtable。
3)HashMap允许将null作为一个元素的key或者value,而Hashtable不允许, key和value都不允许为null
4)Hashtable继承自Dictionary类,而HashMap继承自AbstractMap。HashTable
LinkedHashSet
TreeSet--必须要求存放的对象实现Comparable接口,否则在存入元素的时候会抛出ClassCastException
LinkedHashMap
TreeMap--以Key来做一个自然排序 ,用作key的类型必须实现comparable接口
for(String str : xxList){
xxList.remove(str);
}
Java集合(二)