30岁程序员的未来心路

Java基础-常用的集合类有哪些?

2021-08-25  本文已影响0人  夜暗殇

Java中常用到的集合包括三大类Set、List、Map。首先讲一下自己对于这三大类集合的理解:

Set主要用到的是HashSet和TreeSet两类。HashSet就目前我在工作中常用到的就是它的去重功能(实际工作中业务逻辑需要对集合数据进行去重的时候)。这里就引出HashSet的基本特点了:

HashSet 无序、不允许有重复数据(基于equals方法的返回值实现去重)。另外,还有一个名叫LinkedHashSet的实现类,除了使用HashCode来决定元素位置之外,同时还是用了链表来维护元素的次序(Linked),因此对其插入元素时,看起来是有序的。

TreeSet工作中没有接触,来一段网络知识:

TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。

向TreeSet中加入的应该是同一个类的对象。TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较大小返回0。

自然排序

自然排序使用要排序元素的CompareTo(Object obj)方法来比较元素之间大小关系,然后将元素按照升序排列。Java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现了该接口的对象就可以比较大小。obj1.compareTo(obj2)方法如果返回0,则说明被比较的两个对象相等,如果返回一个正数,则表明obj1大于obj2,如果是 负数,则表明obj1小于obj2。如果我们将两个对象的equals方法总是返回true,则这两个对象的compareTo方法返回应该返回0。

定制排序

自然排序是根据集合元素的大小,以升序排列,如果要定制排序,应该使用Comparator接口,实现 int compare(T o1,T o2)方法。

从上面的引文可以看出,对于集合的排序可以使用元素本身比较大小的方法(前提是实现了Comparable接口的对象);或者去实现Comparator接口的compare()方法来自定义一套比较大小的逻辑。

List分为ArrayList和LinkedList,List是有序集合,允许有重复数据的存在。前者是基于数组的原理存储数据,后者是基于链表的原理存储数据。

List是有顺序的,因此List肯定是可以排序的。考虑到这一点,Java创造者们早就给我们准备好了趁手的工具——Collections,长得有点像Set和List的お父さん(父亲),其实根本不是一个世界的人(类);

关于Collections

这是官方提供的一个处理集合的工具方法的集合,下面来仔细看看这个便利的方法:

sort()方法排序的本质其实也是借助Comparable接口和Comparator接口的实现,一般有2种用法:

1、直接将需要排序的list作为参数传入,此时list中的对象必须实现了Comparable接口,然后sort会按升序的形式对元素进行排序;

2、传入list作为第一个参数,同时追加一个Comparator的实现类作为第二个参数,然后sort方法会根据Comparator接口的实现类的逻辑,按升序进行排序;

Map分为HashMap和LinkedHashMap。Map的存储形式是以键值(Entry)对的方式存在的,存储原理是根据key的hashcode值来进行散列分布的。具体的实现原理会在“HashMap的实现原理”的文章里进行详解,这里不再赘述。

本文根据http://www.jianshu.com/p/820fd1b89c6a归纳整理完成

上一篇下一篇

猜你喜欢

热点阅读