集合、数组、类的使用时机
- 当要存储多个相同类型的数据时——数组
- 当要存储多个不同类型的数据时——创建类 -> 构造方法创建对象
- 当要存储多个相同类型的对象时—— 用泛型集合
- 当要存储多个不同类型的对象时—— 用集合
数组与集合的区别
数组:
- 连续的内存空间,存储单一类型的数据
- 内存空间固定长度
- 插入删除不方便,但查询快捷。
- 数据类型可以是基本数据类型也可以是引用数据类型
集合
- 存储不同类型的对象
- 内存空间可以动态调整
- 数据类型只能是引用类型
集合的接口分布与方法
集合接口:Collection 接口与 Map 接口,前者是单一对象的接口,后者是单对对象(key-value)的接口。
Collection的三个子接口
-
List接口
- ArrayList,动态数组
- LinkedList,双向链表
- Stack , 栈,先进后出
- vector , 安全数组,效率慢
-
Queue接口
priorityQueue:优先队列,根据优先级进行出队入队
-
Set 接口
-
HashSet,以哈希表的结构存储数据。
-
TreeSet,以二叉树的结构来存储数据
-
Collection接口
- add(),添加元素
- addAll(),添加元素集
- remove(),移除元素
- removeAll(),移除元素集
- contain(),是否包含元素
- containAll(),是否包含元素集
- size(),集合大小
List接口
- add(),添加元素
- addAll(),添加元素集
- remove(),移除元素
- size(),大小
- get(),获得元素
- subList(Int formindex,int toindex),返回从formindex(包含) 到 toinedx (不包含)的数据集。
Queue接口
-
boolean offer(E e) -插入元素进队列
-
E poll() - 移除元素进队列
-
E peek() - 返回队首元素
Set 接口
- HashSet,以哈希表用于数据管理
- TreeSet,以二叉树用于数据管理
HashSet 原理
- 插入数据时,计算该数据的哈希值。
- 将哈希值交给哈希算法找到对应的索引位置
- 如果位置为空就插入数据,如果不为空,判断前者与后者是否相等
- 如果相等则不插入,如果不相等则排在前者后面
- 下一个插入时也是如此
TreeSet,有序排序时使用。
实现方式
- 使用自然排序方法,类实现接口 Comparable
- 使用指定规则排序方法,传入 comparator 参数 return a - b 升序 return b - a 降序
iterater,迭代器的方法
- hasnext(),是否有下一个
- next(),返回下一个值
- remove(),移除当前值
Set 的方法
- add(),添加元素
- addALL(),添加元素集
- get(),根据索引获取元素
- size(),获取集合大小
- remove(),根据索引移除元素
- contains(),是否包含元素
- containAll(),是否包含元素集
Set遍历元素的方法:toString,迭代器,forEach List除了以上三种还有一个get()方法可以遍历
map接口
map是存储键值对,用于存储成对的集合 map<K,V>,参数类型:
- K 为键值不可重复
- V 为值
常见的实现类是
- HashMap
- TreeMap
方法:
- put(),新增则返回null,修改则返回之前的Value
- remove(),key不存在则返回null,删除成功则返回之前的Value
- get(),根据值获取Value
- containKey(),判断Key是否存在
- containValue(),判断Value是否存在
- entrySet(),返回包含映射关系的Set视图
- 使用getKey(),获取相应的key
- 使用getValue(),获取相应的Value
- KeySet(),返回Set视图