集合总结
1. 集合是干什么的
|-- 存储对象,只能存储对象
|-- 集合长度是可变的
2. Collection接口
|-- List
|--有索引,有序
|-- ArrayList
|-- 底层是可变数组结构,默认10个,每次增长50%
|-- 特点:查询块,增删慢,线程不安全
|-- LinkedList
|-- 底层是链表数据结构
|-- 特点:查询慢,增删块,线程不安全
|-- Vector
|-- 底层是可变数组结构,默认10个,每次增长100%
|-- 线程安全,效率低,被ArrayList替代
|-- Set
|-- 没有索引,无序,不允许重复元素
|-- HashSet
|-- 底层是哈希表,不存储重复元素
|-- 存储自定义对象,需要覆盖对象中的hashCode和equals方法,保证对象对象唯一
|-- TreeSet
|-- 底层是二叉树结构,不存储重复元素
|-- 存储对象,按照对象的自然顺序排序
|-- 自定义对象,必须具备比较性
|--对象本身具备比较性,实现Comparable接口,覆盖compareTo方法
|--TreeSet本身具备比较性,自定义比较器,实现Comparator接口,覆盖compare方法
|-- LinkedHashSet
|-- 底层是基于链表的哈希表结构
|-- 保证元素的存储和取出顺序
|-- 迭代器
|-- Iterator接口,取出集合中的元素
|-- List和Set集合都有获取迭代器的方法 iterator
|-- hashNext
|-- next
|-- ListIterator接口,List特有迭代器
|-- 可以在迭代集合中,对集合进行增删改的操作
|-- 泛型
|-- JDK1.5以后,引入的安全机制
|-- 将问题提前到了编译时期
|-- 避免了强制类型转换
|-- List Set将上泛型后的效果
|-- <数据类型> JDK 1.7前后自动匹配
3. Map 集合
|-- 双列集合,将键映射到值
|-- 保证键的唯一性,一个键只能映射一个值
|-- put方法将元素存入到集合
|-- get方法根据键,获取值,没有这个键,就返回null
4. Map 集合取出方式
|-- keySet方法*****
|-- Map.Entry 对应集合中的entrySet方法*****
5. Map 集合的子类
|-- HashMap
|-- 底层是双列的哈希表
|-- 不存储重复元素
|-- 存储自定义的对象,必须覆盖hashCode和equals方法
|-- 此集合运行null值和null键
|-- TreeMap
|-- 底层是红黑树,优化算法的二叉树
|-- 存储在这个集合的元素,按照自然顺序排序
|-- 自定义对象,必须具备比较性
|--对象本身具备比较性,实现Comparable接口,覆盖compareTo方法
|--TreeSet本身具备比较性,自定义比较器,实现Comparator接口,覆盖compare方法
|-- LinkedHashMap
|-- 基于链表的哈希表,双列集合
|-- 保证存储和取出的顺序
6. 什么时候使用哪些集合
|-- 看实际要求
|-- 存储对象,不重复 HashSet
|-- 存储对象,不重复需要排序 TreeSet
|-- 存储对象,可以重复,需要查询块 ArrayList
|-- 存储对象,可以重复,增删块 LinkedList
|-- 存储对象不确定,不知道重复不重复,不知道谁需要更快的操作
ArrayList -- 不确定用哪个集合时,选择ArrayList
7. Collections工具类
|-- sort
|-- reverseOrder
|-- reverse
|-- fill
|-- shuffle
|-- max,min
|-- binarySearch
|-- swap
|-- synchronized开头的方法
8. Arrays工具类
|-- sort
|-- binarySeach
|-- toString
|-- asList*****
|-- Collection中的方法toArray()*****
9. 增强for循环
|-- 格式
for(数据类型 变量 : 集合或者数组){
sop(变量);
}
10. 可变参数的函数
格式 functionname(类型...变量){
变量就是数组
当传递的参数类型一致,个数不确定的时候,推荐使用可变参数形式
}
|