1.集合的由来
数据多了存储到对象中,比如工号/姓名/年龄…存储到一个员工对象中
对象多了存储到集合中,因为不止一个员工,会有陆陆续续的新员工添加进来
2.数组与集合的区别
- 数组长度不可变,集合长度可变
- 数组可以存储基本数据类型,集合只能存储对象
- 数组只能存储一种数据类型,因为数组定义的时候指定了数据类型.集合可以存储不同类型的对象
3.集合框架体系
Collection接口:单列集合,有两个子接口
- List接口
三个实现类
1.ArrayList集合: 底层数组
增删慢------因为数组是定长的,每次增删都要创建新的数组,所以增删慢
查询快------因为数组有索引
2.LinkedList集合: 底层链表
增删快------每一个元素存储本身内存地址的同时还存储下一个元素的地址,在链表中增加删除元素,对链表的整体结构没有影响
查询慢------链表中的元素地址不是连续的,每次查询元素,都必须从头开始
3.Vector: 底层数组
线程安全
效率低
- Set接口
有两个实现类
1.HashSet: 底层哈希表
存储元素,无序,不可重复
LinkedHashSet: 底层哈希表+链表,HashSet的一个子类
存储元素,有序,不可重复
2.TreeSet集合: 底层数据结构是红黑树(是一个自平衡的二叉树)
Map接口–双列集合
现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即java.util.Map接口。
我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图。
需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
有三个实现类
1.HashMap: 底层哈希表,无序
非线程安全,高效,支持null
LinkedHashMap------HashMap的一个子类,保存了记录的插入顺序
2.HashTable
线程安全,低效,不支持null
LinkedHashMap------HashMap的一个子类,保存了记录的插入顺序
2.TreeMap
能够把它保存的记录根据键排序,默认是键值的升序排序