(一)Java集合(List,Set,Map)

Collection集合关系图

 

 注意:

  • LinkedList既可以实现Queue接口,也可以实现List接口。实现Queue接口会窄化对LinkedList方法的访问权限(即只能访问Queue接口定义的方法,不能访问非Queue的方法),以使得只有恰当的方法才可以使用。
  • SortedSet是个接口,只有TreeSet这一个实现可用,它里面的元素一定是有序的。

 

 

总结

Collection接口:

 

---List有序,可重复

  • ArrayList

       优点:底层数据结构是数组,查询快,增删慢。

       缺点:线程不安全,效率高。

  • Vector

       优点:底层数据结构是数组,查询快,增删慢。

       缺点:线程安全,效率低。

  • LinkedList

       优点:底层数据结构是链表,查询慢,增删快。

       缺点:线程不安全,效率高。

 

---Set无序,唯一

  • HashSet

       底层数据结构是哈希表。(无序,唯一)

       如何保证元素唯一性?

       依赖两个方法,hashCode()和equal()

  • LinkedHashSet

       底层数据结构是链表和哈希表。(FIFO插入有序,唯一)

       由链表保证元素有序。

       由哈希表保证元素唯一。

  • TreeSet

       底层数据结构是红黑树。(唯一,有序)

       如何保证元素有序?

       自然排序,比较器排序

       如何保证元素唯一性?

       根据比较的返回值是否是0来决定。

 

 

针对collection集合,我们该使用谁呢?(掌握)

唯一吗?

       是:Set

              排序吗?

                     是:TreeSet或LinkedHashSet

                     否:HashSet

       否:List

              要安全吗?

                     是:Vector

                     否:ArrayList或LinkedList

                            查询多:ArrayList

                            增删多:LinkedList

 

 

TreeSet,LinkedHashSet和HashSet区别

  • TreeSet主要功能用于排序。
  • LinkedHashSet的主要功能用于保证FIFO,即有序的集合(先进先出)。
  • HashSet只是通用的存储数据的集合。

相同点:

三者都实现Set接口,三者都不是线程安全的,如果要使用线程安全可以Collection.synchronizedSet()。

不同点:

HashSet插入数据最快,其次LinkHashSet,最慢的是TreeSet因为内部实现排序。

HashSet不保证有序,LinkedHashSet保证FIFO即按插入顺序排序,TreeSet按照内部实现排序,也可以自定义排序规则。

HashSet和LinkedHashSet允许存在null数据,但是TreeSet中插入null数据会报空指针异常。

 

代码比较

 

 

TreeSet两种排序方式比较

1.排序的引入(以基本数据类型的排序为例)

 

2.如果引用数据类型呢,比如自定义对象,又该如何排序呢?

 

(1)自然排序

自然排序要进行一下操作:

1.Student类中实现Comparable接口。

2.重写Comparable接口中的CompareTo方法。

 

(2)比较器排序

1.单独创建一个比较类,这里以MyComparator为例,并要让其继承Comparator接口。

2.重写Comparator接口中的Compare方法。

3.在主类中使用下面的构造方法。

 

 

 

 

Map集合关系图

 

Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable。

  • TreeMap是有序的,HashMap和HashTable是无序的。
  • HashTable是同步的,HashMap的方法不是同步的。这是两者最主要的区别。

这就意味着:

  • Hashtable是线程安全的,HashMap不是线程安全的。
  • HashMap效率较高,HashTable效率较低。
  • Hashtable不允许null值,HashMap允许null值(key和value都允许)。
  • 父类不同,Hashtable的父类是Dictionary,HashMap的父类是AbstractMap。

 

 

参考文章https://blog.csdn.net/zhangqunshuai/article/details/80660974

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值