1、集合中包含以下:
Collection接口:
List接口:
Set接口:
Queue接口:
Arrays数组:
Map接口:
2、Collection接口:
2-1:有以下方法:
名称 | 作用 |
---|---|
size() | 返回集合中的项数 |
isEmpty() | 判断集合是否为空 |
contains(Object) | contains(Object) |
clear() | 清除 |
add(E) | 从集合中添加某项 |
remove(Object) | 从集合中删除某项 |
iterator() | 遍历集合 |
2-2:Collection 继承 Iterable接口
2-2-1:实现iterable接口的类可以拥有增强for循环
2-2-2:集合类必须提供一个名为iterable()的方法,该方法的返回值为iterator
2-3:Iterator方法
名称 | 作用 |
---|---|
hashNext() | 是否存在下一项 |
next() | 获取下一项 |
remove() | 该方法可以生成由next()最新返回的项(注意:此后不能调用remove,直到next再一次调用以后) |
2-4:Collection接口的remove()和iterator接口的remove()方法的区别?
Collection 的remove() | iterator的remove() |
---|---|
单链表查询效率低 | 结合next()方法使用,效率更高 |
会报错,ConcurremModificationException,集合对象个数改变而iterator内部对象个数不变 | 不会报错,内部对象个数和原来集合对象个数一样 |
3、List接口:
特点:
可以添加重复的元素
有顺序 的
3-1: ArrayList与LinkedList 区别?
ArrayList | LinkedList | |
---|---|---|
数组结构 | 链表结构 | |
优点 | get和set调用花费常数时间,查询速度快 | 新项插入和现有项插入的删除开销很小 |
缺点 | 新项插入和现有项插入的删除代价昂贵,,除非是在末端进行 | 对get和set调用昂贵 |
4、Set接口:
特点:
不保存重复的元素
没有顺序
4-1:HashSet:
优点:速度最快,没有明显的顺序保存元素
缺点:集合元素可以为null,但是只能放入一个null。
4-2:TreeSet:
按照比较结果的升序保存对象
4-3:LinkedHashSet:
按照被添加的顺序保存对象
4-4:HashSet、TreeSet、LinkedHashSet区别?
①:需要速度快的集合-----> HashSet
②:需要集合有排序功能 ------->TreeSet
③:需要按照插入顺序存储集合------>LinkedHashSet
5、Map接口:
5-1:HashMap:
优点:访问速度最快。无顺序保存元素
5-2:TreeMap
按照比较结果的升序保存键
5-3:LinkedHashMap:
优点:有顺序的,查询速度快(保留了HashMap的查询速度)
5-4:HashMap、TreeMap、linkedHashMap区别?
①.在Map中插入、删除和定位元素,HashMap是最好的选择
②.需要集合有排序功能,使用TreeMap更好
③.需要按照插入的顺序存储集合,使用LinkedHashMap
6、Array和ArrayList的区别?
ArralyList是Array的复杂版本
Array | ArrayList |
---|---|
Arrays是数组 | ArralyList是集合 |
只能存储相同数据类型 | 存储不同数据类型 |
长度是固定 | 长度是可变 |
6-1:关于ArrayList 容量问题
ArrayList 是实现List 接口的动态数组,即它的容量大小是可变的。允许包括null 在内的所欲元素。
每个ArrayList 实例都有一个容量,该容量是指用来存储列表元素的数组的大小。默认初始容量为10.
随着ArrayList 中元素的增加,它的容量会不端的自动增长。在每次添加新的元素时,ArrayList 都会检查是否需要进行扩容操作,扩容操作带来数据向新数组的重新拷贝。所以,如果已知业务数据量,在构造ArrayList 时可以 指定一个初始容量,这样会减少扩容时数据的拷贝问题。当然在添加大量元素前,应用程序也可以使用ensureCapacity操作来增加ArrayList实例的容量,这可以减少递增式再分配的数量。
具体可以查阅 ArrayList 的源码
ensureCapacity(),该方法就是ArrayList的扩容方法。而每次扩容的容量计算方式
//计算新的容量大小,为当前容量的1.5倍
int newCapacity = (oldCapacity * 3) / 2 + 1;
参考链接:http://www.cnblogs.com/chenssy/p/3498468.html
7、HashMap与HashSet区别?
HashMap | HashSet |
---|---|
实现了Map接口 | 实现了Set接口 |
存储键值对 | 存储对象 |
调用put()向map中添加元素 | 调用add()向set中添加元素 |
HashMap使用key计算hashcode | HashSet使用成员对象计算hashcode |
HashMap相对于HashSet较快,因为它是使用唯一的键获取对象 | HashSet较HashMap来说比较慢 |
8、List、Set、Map之间的区别
List | Set | Map |
---|---|---|
可以允许重复的元素 | 不允许重复元素 | 键值对存储,键必须唯一,但是值可以重复 |
可以插入多个null元素 | 只允许一个null元素 | 键只允许一个null, |
值可以允许有多个null | ||
有序的容器,插入的顺序和输出的顺序一样 | 无序容器 | 无序容器 |
9、Queue 通道、队列:
队列与堆栈的区别?
队列 | 堆栈 |
---|---|
先进先出 | 先进后出 |
10:Queue、Message、Looper、Handler之间的关系
11、总结:
结合这张思维导图,结构一目了然!