Collection 接口 集合顶层接口
--List
元素允许重复,是有序的(存储和取出顺序一致),拥有下标索引的特点
--ArrayList
底层数据结构是数组,查询快,增删慢
线程不安全的,效率高
--Vector
底层数据结构是数组,查询快,增删慢
线程是安全的,效率低 (即使是线程安全的,我们将来不会去使用,因为有更好的去替代)
用Collections中带synchronized方法将不安全的集合转成安全的集合
--LinkedList
底层数据结构是双链表,查询慢,增删快
线程是不安全的,效率高
--Set
元素唯一,无序
--HashSet
底层数据结构是哈希表,哈希表保证元素的唯一性
但是当存储的是自定义对象的时候,要重写hashCode()和equals()方法
--LinkedHashSet
底层数据结构是哈希表和链表,哈希表保证元素的唯一性,链表保证元素的有序(存储和取出顺序一致)
--TreeSet
底层数据结构是红黑树,遍历的时候中序遍历
自然排序 元素的数据类型的类要实现Comparable<T>,重写compareTo()方法
比较器排序
自定义一个类实现Comparator<T>接口,重写compare()方法
匿名内部类的形式进行构造方法传参,重写compare()方法
Map 接口
元素是由一个一个键值对组成,键不允许重复,值允许重复
--HashMap
底层数据结构是哈希表,保证了元素的唯一(指的是键的唯一性),元素是无序
当键是自定义类型的时候,要想保证唯一性,就必须重写hashCode()方法和equals()方法
--LinkedHashMap
底层数据结构是哈希表和链表
哈希表保证的是元素的唯一性
链表保证的是元素有序(指的是存储和取出的顺序一致)
--TreeMap
底层数据结构是红黑树
排序针对于键来说的
自然排序
比较器排序
自定义一个类实现Comparator<T>接口,重写compare()方法
匿名内部类的形式进行构造方法传参,重写compare()方法
将来开发的时候用谁呢?
1、元素的组成是单个还是成对,如果是单个,使用Collection下面的集合,如果是成对出现的,使用Map下面的集合
2、元素允许重复吗?
允许:List
不允许:Set
3、元素需要排序吗?
需要:TreeSet或者TreeMap
不需要:ArrayList等
4、将来查找的功能多吗?
多,用底层是数组的集合
5、将来增删操作多吗?
多,用底层是链表的集合
如果你什么都不知道,用ArrayList。推荐具体情况具体选择。
注意:
增强for循环只能作用于数组和Collection集合,不适用于Map集合