javaSE之集合
存储多个数据
- 
数组特点:存储多个数据,一段连续的内存空间
- 
引用数据类型
 - 
定长,长度一旦确定不可改变
 - 
存储数据的类型相同
 - 
有序,有索引
 
 - 
 - 
集合:
- 
存储任意引用数据类型
 - 
集合的长度可以改变,可根据需求动态的增删减改,长度随之改变
 
 - 
 
容器中的接口层次结构
- 
Collection:单个值的集合
- 
set:无序不可重复
 - 
List:有序可重复,有索引
 
 - 
 - 
Map:键值对的集合(Key-VALUE)
 
遍历方式:
- 
for...each
 - 
iterator迭代器
 
泛型
- 
参数化类型:数据类型作为参数传递,只能配置引用数据类型
 - 
<>定义泛型:泛型的行为发生在编译期间,运行期间发型配置的所有内容无效,泛型擦除,要求先定义泛型,才能使用泛型
 - 
泛型类 : 类型的后面定义泛型,在使用类型的时候可以通过泛型传递具体的类型,类中可以进行使用
 - 
泛型优点:
- 
代码简单简洁
 - 
增强程序健壮性,避免类型转换异常的出现
 - 
增强稳定性与可读性
 
 - 
 
ArrayList :
实现所有可选列表操作,并允许所有元素,包括null 。
- 
底层结构: 数组 Object[] elementData;
 - 
特点: 根据索引查询遍历效率较高,增删效率低
 - 
应用场景: 适合应用在大量做查询,少量做增删的位置
 - 
扩容问题:
- 
初始容量 : 默认初始容量为10 ,在第一次添加add的时候进行构建
 - 
扩容机制 : 每次扩容原容量的1.5倍
 
 - 
 - 
新增功能: void forEach(Consumer<? super E> action)
 - 
遍历 :
- 
普通for
 - 
增强for
 - 
iterator迭代器
 - 
listIterator迭代器
 
 - 
 
Vector:
- 
底层结构 : 数组
 - 
特点 : 与ArrayList相同
 - 
区别:
- 
Vector是同步的|线程安全。 ArrayList不同步|线程不安全,相对效率较高
 - 
Vector每次扩容原容量的2倍。ArrayList每次扩容原容量的1.5倍,相对ArrayList更有利于节省内存
 
 - 
 
总结:如果不需要线程安全,建议使用ArrayList代替Vector
LinkedList:
实现所有可选列表操作,并允许所有元素(包括null )。
- 
底层结构: 双向链表
 - 
特点: 查询效率低,增删效率高
 - 
应用场景:单个数据值的集合中,允许数据有序,且可重复,在大量做增删,销量做查询的时候时候适合使用链表
 - 
新增功能: 新增了一些与链表头尾相关的方法