本篇博客内容总结于网上的两篇博客以及帮助文档:
java常用集合总结,java中常用集合类
一,List类和Set类
1)、List接口及其实现类
List接口继承于Collection接口。 List接口及其实现类是容量可变的列表,可按索引访问集合中的元素。
特点:集合中的元素有序、可重复;
实现类:
ArrayList是以Arayy方式实现的List,允许快速随机存取,相对于LinkedList不适合进行插入和移除元素操作(非线程安全);
LinkedList提供最佳顺序存取,适合插入和移除元素(非线程安全)。
Array和java.util.Vector
Vector是一种老的动态数组,线程安全的,效率很低,一般不赞成使用。
2)、Set接口及其实现类
Set接口同样继承于Collection接口。
特点:集合中的元素无序、不包含重复的元素。
实现类:
HashSet 能够快速定位一个元素,要注意的是:存入HashSet中的对象必须实现HashCode()方法(非线程安全);
TreeSet 将放入其中的元素按序存放(非线程安全)。
二,Map接口及其实现类
Map是一个单独的接口,不继承于Collection。Map是一种把键对象和值对象进行关联的容器。
特点:键对象不允许重复。
实现类:
HashMap 实现一个键到值映射的哈希表,通过键取得值对象(非线程安全);
Properties 一般是把属性文件读入流中后,以键-值对的形式进行保存,以方便读取其中的数据(线程安全的)。
注:HashMap和HashTable
a.HashMap去掉了HashTable的contains方法,但是加上了containsValue()和containsKey()方法。
b.HashTable(继承自java.util.Dictionary<K,V> )线程安全的,而HashMap是非同步的,效率上比HashTable要高。
c.HashMap允许空键值,而HashTable不允许。
4)、Iterator接口
Iterator接口位于java.util包中,它是一个对集合进行迭代的迭代器。
集合容器(如:List、Set、Map等)本身提供了处理元素置入和取出的方式,但是单一选取元素的方法很受限制。所以我们要用Iterator去选取容器中的元素,它将容器转换成一个序列。
集合适用场景
- 对于查找和删除较为频繁,且元素数量较多的应用,Set或Map是更好的选择;
- ArrayList适用于通过为位置来读取元素的场景;
- LinkedList 适用于要头尾操作或插入指定位置的场景;
- Vector 适用于要线程安全的ArrayList的场景;
- Stack 适用于线程安全的LIFO场景;
- HashSet 适用于对排序没有要求的非重复元素的存放;
- TreeSet 适用于要排序的非重复元素的存放;
- HashMap 适用于大部分key-value的存取场景;
- TreeMap 适用于需排序存放的key-value场景。
Collection、Set和List的区别如下:
Collection对象之间没有指定的顺序,允许有重复元素和多个null元素对象;它是Set和List接口的父类,是一种最通用型的集合接口;