Java学习日记-Map接口&Comparable的区别

80 阅读2分钟

知识点总结

  • 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接口的抽象方法

参数ComparableComparator
排序逻辑排序逻辑必须在待排序对象的类中,故称之为自然排序排序逻辑在另一个类中实现
实现实现Comparable接口实现Comparator接口
排序方法int compareTo(Object o1)int compare(Object o1,Object o2)
触发排序Collections.sort(List)Collections.sort(List, Comparator)
接口所在包java.lang.Comparablejava.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)。链表的特点是:寻址困难,插入和删除容易。