概述:
List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口,
2,Set下有HashSet,LinkedHashSet,TreeSet
3,List下有ArrayList,Vector,LinkedList
4,Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
5,Collection接口下还有个Queue接口,有PriorityQueue类
注意:
1,Queue接口与List、Set同一级别,都是继承了Collection接口。
2,看图你会发现,LinkedList既可以实现Queue接口,也可以实现List接口.只不过呢, LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限
(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。
3,SortedSet是个接口,它里面的(只有TreeSet这一个实现可用)中的元素一定是有序的。
Connection接口:
========================================
ArrayList(1)
- 有序,可重复
- 初始容量10 加载因子 1 扩容1.5倍
- 底层数据结构是数组结构(查询快,增删慢)
- 线程不安全,效率高
Vector
- 有序,可重复
- 初始容量10 加载因子1 扩容2倍
- 底层数据结构是数组结构(查询快,增删慢)
- 线程安全,效率低
- 若有设置的初始容量使用设置的初始容量
======================================================
HashSet(2)
- 无序,唯一
- 初始容量是16(2的n次方) 加载因子0.75 扩容2倍
- 底层实现是一个HashMap(保存不重复的数据),只是包含HashMap中的key而已,实现Set接口
- 若有设置初始容量,则使用大于此初始容量的2的幂
TreeSet
- 有序,唯一
- 底层结构是TreeMap (红黑树--2叉树中的一种)
- TreeSet线程不安全,性能不如HashSet
- 但是有序(自然顺序,不是插入顺序),不可重复
- 插入元素如果为非基本类型则需要可比性(Comparable、Comparator)
======================================================
Map接口:
======================================================
HashMap (3)(无序)
- 默认初始容量是16(2的n次方) 加载因子0.75 扩容2倍
- 底层数据结构是 jdk7:数组+链表
jdk8: 数组+链表+红黑树
- 线程不安全,效率高
- 若有设置初始容量,则使用大于此初始容量的2的幂。
- 支持key跟value为null
- 当链表中节点数>=7 && capacity >=64,则将链表变成树结构
HashTable(无序)
- 默认初始容量为11,加载因子为0.75 扩容2倍+1
- 底层数据结构是数组+链表
- 线程安全,效率低
- 若有设置初始容量,则使用此值。
- 不支持key跟value为null
TreeMap
- 底层结构是红黑树(2叉树中的一种) 有序(自然顺序,不是插入顺序)
- TreeMap线程不安全
- 插入元素如果为非基本类型则需要可比性(Comparable、Comparator)
- key不能为null,value可以为null
======================================================
迭代器遍历
1 Set<String> set = new TreeSet<String> (); 2 set.add("seven1"); 3 set.add("seven2"); 4 set.add("seven3"); 5 set.add("seven4"); 6 set.add("seven5"); 7 // 遍历 8 // for(String s : set){ 9 // System.out.println(s); 10 // } 11 // 迭代器遍历 12 Iterator<String> iterator = set.iterator(); 13 while(iterator.hasNext()){ 14 System.out.println(iterator.next()); 15 }