Java集合框架

来源:互联网 发布:上瘾网络剧全集资源 编辑:程序博客网 时间:2024/05/22 04:38

泛型。添加其他类型的元素,编译时报错,避免运行时出现类型转换异常。代码整洁,不需要使用显示转换和instanceOf操作符。


Iterator和ListIterator的区别

(1)Iterator遍历Set和List,ListIterator只能遍历List。

(2)Iterator只能向前遍历,ListIterator可以双向遍历。

(3)ListIterator增加了功能,比如添加一个元素,替换一个元素,获取前面或后面元素的索引位置。


遍历List的方式

List<String> strList=new ArrayList<String>();


for(String str:strList){

System.out.println(str);

}


Iterator<String> it=strList.iterator();

while(it.hasNext()){

String str=it.next();

     System.out.println(str);

}


使用迭代器更加线程安全,因为可以确保,当前遍历的集合元素被更改的时候,会抛出ConcurrentModificationException。


Java.util包中的所有集合类都被设计为fail-fast的,而java.util.concurrent中的集合类(ConcurrentHashMap和CopyOnWriteArrayList这类并发集合类)都为fail-safe的。Fail-fast迭代器抛出ConcurrentModificationException,而fail-safe迭代器从不抛出ConcurrentModificationException。


HashMap和HashTable的区别

(1)HashTable线程安全,HashMap线程不安全。

(2)HashMap允许key和value为空。只允许存在一个key为空。HashTable不允许。

(3)LinkedHashMap,HashMap的子类,支持顺序遍历。

(4)HashMap提供对key的Set进行遍历,因此它是fail-fast的,但HashTable提供对key的Enumeration进行遍历,它不支持fail-fast。


HashMap工作方式

先通过hashcode查找到元素位于哪个哈希桶,之后使用equals方法在链表中查找到元素。


TreeMap适用于对key有序的集合进行遍历。TreeMap线程不安全。

TreeMap实现SortedMap接口。添加到SortedMap实现类的元素必须实现Comparable接口,或者给它的构造函数提供一个Comparator接口的实现。

TreeMap基于红黑树实现。

TreeMap(Comparator c)。构建一个map,并且使用特定的比较器对key进行排序。


ArrayList和Vector的区别

(1)Vector线程安全,ArrayList线程不安全。

(2)ArrayList速度更快。

(3)ArrayList更加通用,可以使用Collections工具类轻易获取同步列表和只读列表。


ArrayList和LinkedList的区别

(1)ArrayList是基于动态数组的数据结构,LinkedList是基于链表的数据结构。

(2)对于随机get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。ArrayList访问元素时间复杂度O(1),LinkedList访问元素时间复杂度为O(n)。

(3)对于随机的add和remove,LinkedList优于ArrayList,因为ArrayList要移动数据。

(4)LinkedList比ArrayList消耗更多的内存。


Vector、HashTable、Properties、Stack是同步类。


使用Collections.unmodifiableCollection(Collection c)方法创建一个只读集合,这将确保改变集合的任何操作都会抛出UnsupportedOperationException。


使用Collections.synchronizedCollection(Collection c)根据指定集合来获取一个synchronized(线程安全的)集合。



0 0
原创粉丝点击