集合基础知识(List, Set, Map)

目录

0 集合

1 List集合 -有序,可重复

2 Set集合 -无序,不可重复

3 Map集合 -key不重复,value可重复

4 常见问题

4.1 list set map区别

4.2 Arraylist与Linkedlist区别

4.3 hashmap 和 treemap区别


0 集合

集合存放的都是对象,即引用数据类型,基础数据类型不能放到集合中。

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

  • List下有ArrayList、Vector、LinkedList

  • Set下有HashSet、LinkedHashSet、TreeSet

  • Map下有Hashtable、LingkedHashMap、HashMap、TreeMap

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


 

1 List集合 -有序,可重复

list集合中的元素是有序的,不关心是否重复。通过序号访问。

list接口有 ArrayList(基于动态数组数据结构的实现),LinkedList(基于链表数据结构的实现),Vector

List list = new ArrayList();

  •  
  • ArrayList:基于动态数组数据结构的实现,底层使⽤ Object[ ]存储,适⽤于频繁的查找⼯作,线程不安全。

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

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

  • LinkedList:基于链表数据结构的实现

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

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

  • Vector:是 List 的古⽼实现类,底层使⽤ Object[ ]存储,线程安全的。

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

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

遍历List集合三种方法:

  1. for循环遍历

  2. for-each循环遍历

  3. 迭代器遍历,Iterator和ListIterator迭代器。

 

2 Set集合 -无序,不可重复

Set集合是有一串无序的,不能重复的相同类型元素构成的集合。不能通过类似list集合的序号访问。

set接口直接实现类是HashSet,HashSet是基散列表数据结构的实现。

  • HashSet(无序,唯一):基于基散列表数据结构HashMap实现的,低层采用HashMap来保存元素
  • LinkedHashSet:LinkedHashSet是HashSet的子类,并且其内部是通过LinkedHashMap来实现的。
  • TreeSet(有序,唯一):红黑树实现(自平衡的排序二叉树)

 

  • HashSet

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

    1. 如何来保证元素唯一性?

    答:依赖两个方法:HashCode() 和equals()

  • LinkedHashSet

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

      1. 如何来保证元素有序性?

      答: 由链表保证元素有序

      2. 如何来保证元素唯一性?

      答:由哈希表保证元素唯一

  • TreeSet

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

  1. 如何保证元素排序的呢?

          自然排序

          比较器排序

     2. 如何保证元素唯一性的呢?

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

用途:

  • TreeSet主要功能用于排序

  • LinkedHashSet的主要功能用于保证FIFO即有序的集合(先进先出)

  • HashSet只是通过的存储数据的集合。

遍历Set集合三种方法:

  1. for-each循环遍历

  2. 迭代器遍历

 

3 Map集合 -key不重复,value可重复

Map(映射)允许按照某个键来访问元素。Map集合由两个集合构成,一个是键(key)集合,键集合是Set集合,所以不能有重复的元素;一个是值(value)集合,是Collection类型,可以有重复的元素。

  • HashMap:jdk1.8之前,HashMap由 数组+链表 实现,数组是HashMap的主体,链表是主要为了解决哈希冲突而存在的。jdk1.8之后,以红黑树 实现。
  • LinkedHashMap:LinkedHashMap继承HashMap,所以低层仍然是基于拉链式散列结构 即 由数组和链表 或 红黑树 组成。在此基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。
  • TreeMap:红黑树(自平衡的排序二叉树)

 

Map接口直接实现类主要是 HashMap,HashMap是基散列表数据结构的实现。

 

Map集合keyvalue
HashMap允许为null允许为null
TreeMap不允许为null允许为null
ConcurrentMap不允许为null不允许为null
HashTable不允许为null不允许为null

Map接口有三个比较重要的实现类,HashMap、TreeMap、HashTable(哈希表)。

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

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

这就意味着:

  • HashTable是线程安全的,HashMap不是线程安全的。

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

  • HashTable不允许null值,HashMap允许null值(key和value都可)

  • 父类不同:HashTable的父类是Dictionary,HashMap的父类是AbstractMap。

 

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

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

 

4 常见问题

4.1 list set map区别

     ① list 集合中的元素是有序的,可以有重复的,通过序号访问。list接口的实现类有ArrayList、LinkedList等。其中ArrayList和LinkedList是线程不安全的,Vector是线程安全的。

     ② set集合是的元素是无序的,不能重复的,不能通过类似list集合的序号来访问。set接口实现类有HashSet、LinkedHashSet、TreeSet。

     ③ Map集合由两个集合构成,一个是键(key)集合,键集合是Set集合,所以不能有重复的元素;一个是值(value)集合,是Collection类型,可以有重复的元素。Map(映射)允许按照某个键来访问元素。map实现类有HashMap、TreeMap、Hashtable等。

4.2 Arraylist与Linkedlist区别

     ① ArrayList底层数据结构是数组,查询快,增删慢。

     ② LinkedList底层数据结构是链表,查询慢,增删块。

     ③ 它们都是线程不安全的。

4.3 hashmap 和 treemap区别

     ① HashMap是无序的,TreeMap是有序的;

     ② HashMap的key和value都允许为null,TreeMap的key不允许为null;

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值