ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

集合

2019-09-25 17:06:42  阅读:198  来源: 互联网

标签:Set HashMap HashSet ArrayList 接口 集合 TreeSet


集合

1.概述

  • List,Set,Map都是借口,前两个继承Collection接口,Map为独立接口。

  • Set下有HashSet,LinkedHashSet,TreeSet

  • List下有ArrayList,Vector,LinkedList

  • Map下有Hashtable,LinkedHashMap,HashMap,TreeMap

  • Collection接口下还有个Queue队列接口,有PriorityQueue类

 

2.注意

Queue接口与LIst,Set同一级别,都是继承了Collection接口

即在方法中的参数类型如果是Queue时,LinkedList就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法

SortedSet是个接口,它里面的(只有TreeSet这一个实现可用)的元素是一定有序的

3.总结

Connection接口:

List有序,可重复

  • ArrayList

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

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

  • Vector

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

    缺点:线程安全,效率低

  • LinkedList

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

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

Set无序,不重复(唯一)

  • HashSet

    底层数据是Hash表,无序、唯一

    如何保证元素唯一性?

    依赖两个方法hashCode() 和euqals()

  • LinkedHashSet

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

    1.由链表保证元素有序

    2.由哈希表保证元素唯一

  • TreeSet

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

    1.如何保证元素排序

    自然排序

    比较器排序

    2.如何保证元素唯一性

    根据比较返回值是否为0判断

针对Collection集合我们到底使用谁呢?

唯一吗?
•   是:Set
•       排序吗?
•           是:TreeSet或LinkedHashSet
•           否:HashSet
•           如果你知道是Set,但是不知道是哪个Set,就用HashSet。
•   否:List
•       要安全吗?
•       是:Vector
•       否:ArrayList或者LinkedList
•           查询多:ArrayList
•           增删多:LinkedList
•           如果你知道是List,但是不知道用哪个,就用ArrayList。
•   如果你知道是Collection集合,但是不知道使用谁,就用ArrayList。
•   如果你知道用集合,就用ArrayList。
​

TreeSet,LinkedHashSet和HashSet的区别

1.介绍
TreeSet, LinkedHashSet and HashSet 在java中都是实现Set的数据结构
    TreeSet的主要功能用于排序
    LinkedHashSet的主要功能用于保证FIFO即有序的集合(先进先出)
    HashSet只是通用的存储数据的集合
​
2.相同点
    Duplicates elements: 因为三者都实现Set interface,所以三者都不包含duplicate elements
    Thread safety: 三者都不是线程安全的,如果要使用线程安全可以Collections.synchronizedSet()
​
3.不同点
    HashSet插入数据最快,其次LinkHashSet,最慢的是TreeSet因为内部实现排序
    HashSet不保证有序,LinkHashSet保证FIFO即按插入顺序排序,TreeSet安装内部实现排序,也可以自定义排序规则
    HashSet和LinkHashSet允许存在null数据,但是TreeSet中插入null数据时会报NullPointerException

 

Map接口:

 

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

  • TreeMap是有序的,HashMap和HashTable是无序的。

  • Hashtable的方法是同步的,HashMap的方法不是同步的,这是两者最主要的区别

这就意味着:

  • Hashtable是线程安全的,HashMap线程不安全

  • HashMap效率较高,HashTable效率较低

    如果对同步性和遗留代码的兼容性没有任何要求,建议使用HashMap,查看HashTable的元,啊就能发现,除构造函数以外,Hashtable的所有public方法声明中都有synchronized关键字,而HashMap的源码中没有。

  • HashTable中不允许有空值,而HashMap允许有null(Key和value都可以)

  • 父类不同,Hashtable的父类是Dictionary,HashMap的父类是AbstractMap

标签:Set,HashMap,HashSet,ArrayList,接口,集合,TreeSet
来源: https://blog.csdn.net/weixin_41586318/article/details/101373010

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有