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 )。
-
底层结构: 双向链表
-
特点: 查询效率低,增删效率高
-
应用场景:单个数据值的集合中,允许数据有序,且可重复,在大量做增删,销量做查询的时候时候适合使用链表
-
新增功能: 新增了一些与链表头尾相关的方法