集合框架概述
虚线是接口
实线是实现类
Collection 接口 : 用于存储单个对象的集合。
List 接口
1.有序的
2.允许多个Null
3.具体的实现类常用的 :ArrayList Vextor LinkedList
Set接口:
//使用集合来存储多个不同类型的元素 (对象),处理时比较麻烦。
//我们应该在一个集合存储相同类型的对象
List list =new Arrays<>();
遍历集合
int size = list.size(); //方法在栈中 效率高。
for(int i = 1;i<size;i++){
syso list.get(i);}
conrains(object o)
如果列表中包含指定的元素,则返回True;
list.toArray
集合框架List接口
List 接口的大小可变数组的实现。实现了所有可选列表操作。
ArrayList
1.实现原理 ,采用动态对象数组实现,默认构造方法创建了一个空数组。
2.第一次添加元素 扩充容量10,之后的扩充算法? 原来数组大小+原来数组的一半
3.不适合进行删除或者插入操作。
4.为了防止数组动态扩容过多,建议创建ArrayList时,给定初始容量
5.线程不安全,适合在单线程访问时使用
JDK1.2开始使用。
ArrayList的遍历
三种遍历方式 for \ for-each \ iterator
1.for
2.for -each
3.Iterator it = list.iterator();
while(it.hasNest){
String elem=(String)it.next();
LinkedList
1.实现原理 采用双向链表结构实现
2.适合插入 删除操作 性能高
在实际开发中 如何选择LIST的具体实现
1.安全性问题
list 不要考虑
2.是否频繁插入 删除操作
建议LinkedList 性能高
3.是否是存储后遍历。
ArrayList
面试题
自己实现一个ArrayList
动态List
List 和 Collection 的关系和区别
public int
List 有序 Collection 无序 增加了 位置/ 索引 相关的操作方法。
底层区别很大
list.add(3,“Servlet”);
ArrayList 需要大量的后移元素 数组 顺序表结构
LinkedList 需要找到指定的位置 ,然后修改元素的引用
链表结构
Set 集合的分类和特点
Set 无序 唯一
HashSet
采用Hashtable 哈希表存储结构
HasMap实现
不保证顺序 恒久不变
优点 添加速度快 查询速度快 删除速度快
缺点 无序
添加元素时 把元素作为 HashMap的Key存储 ,HashMap的value使用一个固定的Obj对象。
排除重复元素是通过
equal 来检查是否相同。
set不包含满足 e1.equals(e2) 的元素对e1和e2 , 并且最多包含一个NUll元素。此接口模仿了数学的Set抽象
LinkedHashSet
采用哈希表存储结构 同时使用链表维护次序
有序 (添加顺序)
TreeSET
采用二叉树 的存储结构
优点 有序 查询速度比List快 (按内容查询)
缺点 查询速度没有Hashset快
数组加链表的实现 ---- 哈希表
ATM实例
instanceof
泛型
增加数据重用性