面试必问知识点:常用集合Map、List和Set基本用法区别及联系

3 篇文章 0 订阅

在平常开发工作中,经常会用到集合,集合的种类很多。常用的集合有Map、List、Set等,那么它们之间有什么区别及联系呢?好了,下面开始正题咯!

先看一张集合的关系图:

Collection集合接口下面有List、Set和Queue,Map为独立的接口。List下面分为ArrayList、LinkedList和Vector;Set下面分为HashSet、TreeSet和LinkedHashSet;Queue下面有PriorityQueue;Map下面分为HashMap、TreeMap、HashTable和LinkedHashMap。

1:List:有序,可重复

1)ArrayList:底层实现是数组,查找速度比较快,增加和删除速度比较慢,不是线程安全的;

2)LinkedList:底层实现是链表,查看速度比较慢,增加和删除速度比较快,不是线程安全的;

3)Vector:线程安全的,已经被逐渐废弃,这里不再赘述;

2:Set:

1)HashSet:无序,不可重复,底层实现是哈希表,最主要的方法就是hashCode()和equals()方法。当往其中存储元素的时候,判断其hashCode值是否相同,通过hashCode值确定其存储的位置。通过hashCode()方法,判断两个对象哈希值是否相同,通过equals方法,判断两个对象是否相同,如果两者值有其一不同,则认为是不同的对象。如果两个对象相同,则hashCode值相同;两个对象hashCode值相同,对象不一定相同。

2)TreeSet:有序,不可重复,底层实现是红黑树。基本操作方法有add、remove和contains。TreeSet是SortedSet接口的实现类,采用红黑树的来存储元素。TreeSet支持两种排序方法,自然排序和定制排序。

3)LinkedHashSet:有序,不可重复。底层实现是链表和哈希表。LinkedHashSet是Set的一个具体实现。LinkedHashSet存储结构是一个双向链表,因此它存储的元素是有序的。

3:Map

1)HashMap:无需,可重复

public class Demo {
    public static void main(String[] args) {
        HashMap<String,String> map = new HashMap();
        map.put("id","20200625");
        map.put("name","小杜");
        map.put("age","18");
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());
        }
    }
}

底层实现是哈希表,key和value允许为空值。在jdk1.8以前,底层实现是数组加链表,在jdk1.8中,底层实现是数组加链表加红黑树。当同一个位置存储的元素超过阈值8时,链表转换为红黑树;当元素值少于阈值6时,红黑树转换为链表。

2)HashTable:

public class Demo {
    public static void main(String[] args) {
        Hashtable hashtable = new Hashtable();
        hashtable.put("1","1111");
        hashtable.put("2","2222");
    }
}

底层实现是哈希表,不允许key和value为空值,是线程安全的,底层的实现方法都加了关键字Synchronize,所以是线程安全的。

3)LinkedHashMap:

根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序,它不是线程安全的。

4)TreeMap:

底层实现是红黑树,是一个有序的key、value集合。TreeMap有两种排序方式:自然排序和定制排序。不允许key和value为空值。

总结:以上总结了集合的分类及基本用法,具体使用哪种,要根据业务场景,选择合适的集合,这样才能提高性能,更好的实现功能。

知识就是要不断的学习,不断的复习,才会记忆的更加的深刻。加油,美好的风景一直在路上。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值