Java集合框架
2015-07-24 20:46
477 查看
泛型。添加其他类型的元素,编译时报错,避免运行时出现类型转换异常。代码整洁,不需要使用显示转换和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(线程安全的)集合。
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(线程安全的)集合。
相关文章推荐
- Java中的一些错误提示原因
- struts 拦截器入门&执行流程
- java常量使用
- java基本算法之排序
- 使用MyEclipse编写Java程序
- Java内部类的继承
- Java学习笔记一
- JAVA动态性
- java面向对象--06
- 关于java基础--反射机制的详解
- 关于java基础--动态代理
- 从一个“变态”的题看“分析Java源代码”的重要性!
- Java基本语法--运算符
- Java继承类中static成员函数的重写
- Java集合框架学习笔记
- Struts2的配置以及详解
- Spring的配置以及详解
- 用Java进行AES256-ECB-PKCS7Padding加密
- Java转型(向上或向下转型)
- java多线程