为什么需要用集合
- 和数组对比:1长度指定,不可变。2 保存同一类型数据。3 增删麻烦(扩容)
- 集合的好处:1 动态保存 2 提供多种操作对象方法(不需自己写底层代码,高效面对业务逻辑) 3 代码简洁
- Collection和Map的实现子类
集合有两组:1 单列集合:放的是单个对象 2 双列集合:存放键值对
实现类特点:1 存放多个元素 2 有些实现类可有重复元素
3 有些实现类是有序的(list)有些无序(set)4通过子接口实现,自己无直接实现
方法 使用(子类实现)
增删
1 add(object)2 remove(int index)返回值 (object)指定删除
3 contains(object) 4 size()5 isEmpty()6 clear()
7 addAll(collection o)只要是collection实现的子类对象都可加入
8 containsAll(obj)9 removeAll(obj)
List接口方法(collection 的细化子接口)遍历元素方式
1迭代器:collection有iterator 方法,子类去实现,有next(下移并返回)和hasnext两个方法。使用前要先得到对应的迭代器 快捷键 itit 或ctrl+j
注意:如果需要再次遍历,需要重置迭代器
2 for 增强循环 用于集合和数组 底层仍然是迭代器!!!(就是简化版的迭代器)快捷键 I
特点:1 有序且可以重复 (添加与取出顺序一致)
2 元素有索引
方法
1 add 可插入具体位置,默认放在最后面
2 addAll 可插入具体位置,默认放在最后面
3 indexOf()返回首次出现 lastIndexOf
4 remove(index) 5 set(index,obj)
6 subList(fromin ,toindex)是左闭右开的 [ )
7 get
list接口的三种遍:
1iterator 2 增强for循环(最简洁的) 3普通for循环
//list的3种实现
ArrayList底层结构和源码分析(重点)注意事项:1 可以加入一个或多个null值 2 由数组实现 3 线程不安全(但是执行效率高,多线程下不建议使用,可用vector)
结论无参构造的源码
第一步
第二步
size++ 先赋值后++
第三步
第四步
modcount++是记录线程的
第五步
copyof()保存原来数组元素,扩容内容为null值
有参数构造器
vector底层结构和源码分析除了第一步其他跟上面一样
linkedList底层结构特点:1 也是对象数组存储 2 线程同步的,线程安全 操作方法有synchronized
添加节点
删除节点
(这两个都是线程不安全的,在单线程下使用)
特点:1 无序 (添加和取出不一致) 没有索引 2 不允许重复元素,最多一个null值 遍历方法没有普通for循环(没有索引)没有get方法
//多态
补充内容
接口 :规定相关方法(可以有默认方法default 和静态方法static),类要根据具体情况去全部实现这个接口里面的抽象方法
特点:1 一个类可以同时实现多个接口 2 接口中的属性是final的而且是public static final 修饰 3 接口不能继承类 接口可以继承多个接口 4 接口的修饰 为public default


 《Java集合专题》[精品贴](持续更新)](http://www.mshxw.com/aiimages/31/445000.png)
