Java集合可以根据父接口分为两大类:
-
Iterator:
-
- 实现此接口可以用有增强for循环也就是foreach功能
- 实现此接口会给集合提供一个iterator()方法,该方法返回值为Iterator
- haseNext():判断是否存在下一项
- next():获取下一项
- remove():删除获取出来的项
- 注:调用remove()方法时需要先调用next()方法
-
Collection:
-
List:(可以添加重复元素)
- Vector(不常用)
- LinkedList(增删改快)
-
ArrayList(查询快)
-
Set:(不可用重复)
- HashSet(都快)
- TreeSet(拥有排序功能)
- LinkedHashSet(有序)
-
Queue(队列:先进先出)
Collection与Iterator的remove()方法对比 名称 Collection Iterator 参数 有参 无参 性能 相对Iterator慢 相对Collection快 容错 相对Iterator差 相对Collection好
-
-
Map:
- HashMap(都快)
- TreeMap(拥有排序功能)
- LinkedHashMap(有序)
名称 | Map | Set | List | ||||||
---|---|---|---|---|---|---|---|---|---|
是否拥有增强for循环 | 否 | 是 | 是 | ||||||
存储特点 | 键值对方式存储 | 对象存储 | 对象存储 | ||||||
是否可以重复 | 键不能重复值可以重复 | 不能重复 | 可以重复 | ||||||
是否有序 | 无序 | 无序 | 有序 | ||||||
计算方式 | 使用key计算hashcode |
使用成员对象计算hashcode | 使用成员对象计算hashcode | ||||||
是否可以插入null值 | key只能插入一个值可以插入多个 | 只能插入一个人 | 可以插入多个 |
一、List集合中ArrayList与LinkedList的区别
ArrayList | LinkedList |
---|---|
数组结构 | 链表结构 |
查询,修改速度快 | 增删快 |
原因:
-
ArrayList查询时是直接根据下标查询而LinkedList是重头开始遍历查询的所有ArrayList查询速度比LinkedList速度快、而查询速度快那么修改也是一样
-
LinkedList是链表结构的所有增删是不会改变原有的位置,而ArrayList增改的时候可能会改变所有的下标将数据向后或向前移动所有ArrayList慢而LinkedList快
二、ArrayList与Array的区别
-
Array只能储存相同的数据类型而ArrayList能储存不同数据类型
-
Array长度是固定的而ArrayList的长度是根据扩容因子进行扩容
三、HashMap的实现原理
使用put、get方法时使用hashcode方法计算获取bucket位置,然后找寻是否已经拥有此键如果有就替换(否则就添加在bucket的位置)或者读取。
而且HashMap会根据扩容因子进行扩容(初始化容量*%75),而且每次扩容是前一次的二倍
如有补充或错误请在评论区纠正谢谢