java常用集合总结
常用集合框架构成:
可以从图中看出List集合与Set集合都继承于Collection(位于java.util包)接口,而Collection接口又继承于Iterable接口;且Map集合不继承任何接口
(一)Iterable
Iterable接口有两大特点:
-
实现Iterable接口的类可以增强for循环
-
实现Iterable接口的集合类必须提供iterator()方法,其返回类型为Iterator
Iterator方法:
(1). hasNext():是否存在下一项
(2). next():获取下一项
(3). remove():删除next()查询的最新一项
(二)Collection
Collection接口的方法:
- size():返回集合中的项数
- isEmpty():判断集合是否为空
- contains(Object):判断集合是否包含某项
- clear():清空集合元素
- add(E):从集合添加某项
- remove(Object):从集合删除某项
- iterator():遍历集合
这里看到Iterable接口和Collection接口都有remove()方法,那者两者有什么区别昵
(1)性能方面:
Collection的remove()方法是先查询被删除订单项的位置,而查询位置用的是单链表查询所以效率较低
Iterator的remove()方法是结合next()使用直接删除查询的最新一项,所以效率更高
(2)容错方面:
Collection在iterator遍历时使用remove()方法会报ConcurrentModificationException,因为集合中的对象被删除后iterator内部对象的个数并没有改变
Iterator便利时不会报错,因为Iterator内部集合与原集合对象个数保持一致
(三)List
ArrayList和LinkList的区别
ArrayList(数组结构):
优点:查询速度快
缺点:新增删除速度慢
LinkedList(链表结构):
优点:新增删除速度快
缺点:查询速度慢
Array与ArrayList有什么区别
- Array是数组,ArrayList是动态数组,ArrayList是Array的复杂版本
- 存储的数据类型:Array只能存储相同数据类型的数据,而ArrayList可以存储不同数据类型的数据
- 长度的可变:Array的长度是固定的,而ArrayList的长度是可变的
怎样将一个数组转成List,有什么方法
- 数组转集合:Arrays.asList(数组)
- 集合转数组:list.toArray()
(四)Set
HashSet、TreeSet、LinkedHashSet区别?
- 速度快的集合:HashSet
- 有排序功能的集合:TreeSet
- 按照插入顺序存储的集合:LinkedHashSet
(五)Map
HashMap、TreeMap、linkedHashMap区别
- 在Map中新增、删除和查询,使用HashMap速度最快
- 有排序功能的集合:TreeMap
- 按照插入顺序存储的集合:LinkedHashMap
HashMap的实现原理
通过put和get存储和获取对象,以键值对的方式存取值,且会根据自身的储存空间的占用情况自动扩容,比如16*0.75=12;集合容量为16,集合的扩容因子为75%,所以当集合容量到12时机会自动扩大集合容量到32
HashMap和HashSet区别
HashMap | HashSet |
---|---|
实现了Map接口 | 实现了Set接口 |
存储键值对 | 存储对象 |
添加元素用:put() | 添加元素用:add() |
使用key计算hashcode数值 | 使用成员对象计算hashcode数值 |
比HashSet较快 | 比HashMap较慢 |
List、Set、Map之间的区别
List | Set | Map |
---|---|---|
有序、有下标、可重复 | 无序、无下标、不可重复 | 键值对存储,键不可重复,值可重复 |
可以有多个null | 只能有一个null | 键只能有一个null,值可有多个null |
根据下标取值 | 使用iterator | 根据键取值 |