知识点总结
- Collections类是Java提供的一个集合操作工具类,Collection是集合的接口实现了List接口和set接口
Comparable
- Comparable是排序接口。
- 实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。
- 实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。
- **compareTo()**是该接口唯一的方法,比较此对象与指定对象的顺序,如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
Comparator
- Comparator是比较接口
- 通过实现Comparator可以新建一个比较器,然后通过这个比较器对类进行排序。
- 若一个类要实现Comparator接口:它一定要实现compare(T o1, T o2) 函数,但可以不实现 equals(Object obj) 函数。
- int compare(T o1, T o2) 是“比较o1和o2的大小”。返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。
Comparable、Comparator、compareTo 区别是什么?
-
相同点:
-
Comparable、Comparator、compareTo 都和给对象进行排序有关
-
Comparable和Comparator都是接口
-
-
不同点:
compareTo 是Comparable接口的抽象方法
参数 | Comparable | Comparator |
---|---|---|
排序逻辑 | 排序逻辑必须在待排序对象的类中,故称之为自然排序 | 排序逻辑在另一个类中实现 |
实现 | 实现Comparable接口 | 实现Comparator接口 |
排序方法 | int compareTo(Object o1) | int compare(Object o1,Object o2) |
触发排序 | Collections.sort(List) | Collections.sort(List, Comparator) |
接口所在包 | java.lang.Comparable | java.util.Comparator |
Map接口
- Map接口存储一组成对的键(key)一 值(value)对象
- Map接口中的key不要求有序,不允许重复。value同样不要求有序,但允许重复。
HashMap
- HashMap是Map接口的实现类。
- 元素以键值对的方式存储,内部采用 哈希表 实现,采用 哈希算法计算 键—值对 的存放位置。
- 允许使用null 键和null 值,但key不允许重复,只能有一个键为null
- HashMap是非线程安全的。
数据存储结构
-
HashMap采用Entry数组来存储key-value对,每一个键值对组成了一个Entry实体,Entry类实际上是一个单向的链表结构,它具有Next指针,可以连接下一个Entry实体,以此来解决Hash冲突的问题。
-
数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;
-
链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。