Collection 集合
集合框架:是为了表示和操作儿规定的一种统一的标准的体系结构,任何几个框架都包含三大块内容:
对外的接口:即表示集合的抽象数据类型
接口的实现 :即表示集合框架中接口的具体实现
对接运算的算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等
集合常用实现类关系图
Connection接口
Connection 是集合的根接口
没有实现这个接口的实现类
List接口
- List 接口是Collection 的子接口,实现了List接口的容器中存放的对象是有序的,而且可以重复
- List 容器存放的对象都有一个整数型的索引 (即下标,从0开始)
- JDK 提供实现List的类有ArrayList , LinkedList等
ArrayList类
List 接口的实现类 :用于描述长度可变的数组列表(可自动增长,可放不同的数据类型)
迭代方式
普通的for循环
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
迭代器
foreach 循环
LinkedList
- 是List接口的实现类
ArrayList 和 LinkedList类区别:
List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素 。
List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)
Vector 类
- java.util.Vector实现了List接口,用于描述长度可变的数组向量(底层采用数组实现),这与ArrayList类似
- 与ArrayList的区别:Vector是线程安全的(同步),用在多线程环境中,运行效率慢。ArrayList不是线程安全的,用在单线程环境中
Stack 类
- Stack类是Vector的子类,通过push()和pop()方法实现一个标准的LIFO堆栈
Set 接口
Set接口是Collection的子接口,Set接口没有提供新增的方法,但实现Set接口的容器中元素不可以重复。JDK中提供的实现Set接口的类有HashSet、TreeSet等
TreeSet:基于平衡树的方式存放数据(支持排序)
HashSet:基于散列表的方式存放数据(无顺序)
在选择的时候,如果顺序很重要,则可以选择TreeSet,如果操作性能和时间效率很重要的话,则可以选择HashSet
Map 接口 集合
- Map 接口不继承Collection接口
- Map接口用于维护键/值对(key/value pairs)
- 他的实现类有:HashMap, Hashtable,这二者使用方法基本相同
HashMap和HashTable的区别
- Hashtable中的“key”和“value”都不允许null,而HashMap允许。
- Hashtable是线程安全的,适合在多用户环境中使用,效率稍低;HashMap不是线程安全的,效率稍高,适合在单线程环境下使用。