数组
一组具有某种特性的数据存放在一起 数据类型一致 长度固定
集合(与数组类似 集合的长度存储后还能改变)
是指具有某种特定性质的具体或抽象的对象汇总而成的集体
(可以理解为我们封装的Box 只不过比我们写的方法更多 更高级)
都在java.util包下
集合有两大体系:Collection接口 和 Map接口
Collection
存储的value都是引用类型的
其中常用:
List接口:有序可重复
常用具体实现类:
1.ArrayList(类似于我们写的ArrayBox)
2.LinkedList
3.Vector
与 ArrayList区别 类似于 StringBuffer与StringBuilder 区别
VectorJDK 1.0 ArrayList JDK1.2
早期版本 线程同步 安全性较高 执行效率相对较低
后期版本 线程不同步 安全性较低 执行效率相对较高
Queue接口:有序可重复
常用具体实现类:
LinkedList类
Set接口:无序无重复
对于重复的元素 只存第一个进来的 后续的拒绝存入
常用具体实现类:
1.HashSet
2.TreeSet
Map
存储方式以 键值对 的形式存储 key-value
类似于映射 通过一个key可以直接定位value的位置
key若有相同的 则将原有的value覆盖
key无序无重复 value无序可重复
其中常用:
HashMap(key可以为null) —-> 早期版本 Hashtable(key不能为null 编译时好用 运行不好用)
TreeMap
Hashtable
Properties
序:即顺序 添加进去的元素 与 取得元素的顺序(注意不是集合自己的顺序)
重复:两个对象元素一致
集合特点
List:元素 有序 可重复(有索引)
ArrayList:查询快 增删慢
LinkedList:查询慢 增删快
Set:元素 无序 不可重复(没有索引) 遍历只能用 Iterator迭代器 和 增强for 不能用普通for
HashSet:查询快 增删慢(底层就是Map)
存放的引用数据类型需重写hashCode()和equals()方法
TreeSet
集合什么情形下使用
5.1 想要存储一组元素
数组 or 集合 如果存储的元素以后长度不变 用数组
如果长度不确定 用集合
5.2 长度不确定时——>集合
List家族 有序 存储有顺序用这个
1.ArrayList 更适合遍历轮询
2..LinkedList 更适合插入删除
3.Stack LIFO
Set家族 无序 无重复 存储元素希望自动去掉重复元素用这个
HashSet 性能更高
TreeSet 希望存进去的元素自动去重复 同时还能自动排序
Map家族k-v 想要通过唯一的kay快速找寻v 就用map
HashMap 性能更高
TreeMap 希望存进去的元素它的key能自动排序