Java集合容器可分为两大类:
①Connection
Conllection提供了以下方法:
- size():返回集合中的项数
- isEmpty():判断集合是否为空
- contains(Object):判断集合中是否包含某项
- clear():清空
- add(e):从集合中添加某项
- remove():从集合中删除某项
- iterator():遍历集合
Collection(java.util)继承Iterable:
Iterable:
- 实现Iterable接口的类可以拥有增强for循环(foreach)
- 实现Iterable接口的集合类必须提供一个名为Iterable()的方法,该方法的返回值为Iterable
Iterable()方法:
- hasNext():是否存在下一项
- next():获取下一项
- remove():该方法可以删除由next()最新返回的项
下面有三个子类:List、Set以及Queue三个接口
List
- 有序;可重复
- List有两个子类:ArrayList、LinkedList
- ArrayList调用get、set方法花费常数时间(非常短),所以比LinkedList查询快
- LinkedList的插入和删除花费代价小,所以比ArrayList更适合做增删改
Set
- 无序;无重复
- Set有三个子类:HashSet、TreeSet、LinkedHashSet
- HashSet:速度最快,没有明显的顺序保存元素
- TreeSet:可按照比较结果的升序进行排序
- LinkedHashSet:可按照插入的顺序进行排序
Queue
- 先进先出
②Map
- 以键值对存在,键唯一,值可重复;键只能有一个null,值可以有多个null;无序
- Map有三个子类:HashMap、TreeMap、LinkedHashMap
- HashMap:访问速度最快,没有明显的顺序保存元素
- TreeMap:可按照比较结果的升序保存键
- LinkedHashMap:按照插入顺序保存键,同时还保留HashMap的查询速度
一、Array和ArrayList的区别?
- ArrayList是Array的复杂版本
- Array只能存在相同数据类型的数据,而ArrayList可以存储不通数据类型的数据
- Array的长度是固定的,而ArrayList的长度是可变的
二、ArrayList和LinkList的区别?
- ArrayList调用get、set方法花费常数时间(非常短),所以比LinkedList查询快
- LinkedList的插入和删除花费代价小,所以比ArrayList更适合做增删改
三、怎样将一个数组转成List?
- 数组转list,可以使用Arrays.asList(数组)
- List转数组,使用list.toArray()
四、Collection接口的remove()方法和Iterator接口的remove()方法区别?
性能
- conllection的remove()方法先要从集合中找到要删除的项,找到该项的位置采用的是单链表接口查询,效率低
- Iterator的remove()方法结合next()方法使用,每个一项删除一项,效率高
容错
- 使用Iterator遍历时,如果使用Collection的remove会报遗产,因为Collection内的对象个数会改变而Iterator不会
- 使用Iterator遍历时不会报错,因为Iterator内部的对象个数和原来集合中对象的个数会保持一致
五、List、Set、Map的区别?
- List
- 有序;可重复;可插入多个null值
- Set
- 无序;无重复;只能插入一个null值
- Map
- 以键值对存储,键唯一,值可重复;键只能有一个null,值可以有多个null;无序
六、HashSet、TreeSet、LinkedHashSet区别?
- 需要速度快的集合,使用HashSet
- 需要集合有排序,使用TreeSet
- 需要按照插入的顺序存储集合,使用LinkedHashSet
七、HashMap、TreeMap、LinkedHashMap区别?
- 在Map中插入、删除和定位元素,HashMap是最好的选择
- 需要集合有排序功能,使用TreeMap更好
- 需要按照插入的顺序存储集合,使用LinkedHashMap
八、HashMap和HashSet区别?
HashMap
- 实现Map接口
- 存储键值对
- 调用put()向map中添加元素
- 使用key计算hashcode
- 相较于HashSet更快,因为使用唯一的键获取对象
HashSet
- 实现了Set接口
- 存储对象
- 调用add()向set中添加元素
- 使用成员对象计算hashcode
- 相较于HashMap要慢