list、set、map集合的详细区别

技术合作:请添加扣扣292562868,承接各种网站、后台管理、APP等任务

一、list、set

https://images0.cnblogs.com/i/532548/201404/262238192165666.jpg

list、set的父类是collection,collection的父类是Iterator

List:有序可重复集合

①、List list1 = new ArrayList();

    底层数据结构是数组,查询快,增删慢;线程不安全,效率高

   ②、List list2 = new Vector();

    底层数据结构是数组,查询快,增删慢;线程安全,效率低,几乎已经淘汰了这个集合

   ③、List list3 = new LinkedList();

    底层数据结构是链表,查询慢,增删快;线程不安全,效率高

Set:查看HashSet的源码,HashSet集合就是HashMap的key组成

  • HashSet:不能保证元素的顺序;不可重复;不是线程安全的;集合元素可以为 NULL;其底层是一个数组,加快查询效率,index = hash(value);

对于 HashSet: 如果两个对象通过 equals() 方法返回 true,这两个对象的 hashCode 值也应该相同;如果 hashCode 值相同,那么会继续判断该元素和集合对象的 equals() 作比较

hashCode 相同,equals 为 true,则视为同一个对象,不保存在 hashSet()中

hashCode 相同,equals 为 false,则存储在之前对象同槽位的链表上。

  • Set linkedHashSet = new LinkedHashSet(); 不可重复有序集合,不是线程安全的

因为底层采用 链表 和 哈希表的算法。链表保证元素的添加顺序,哈希表保证元素的唯一性

  • Set treeSet = new TreeSet();不可重复有序集合,不是线程安全的

底层使用红黑树算法,擅长于范围查询

如果使用 TreeSet() 无参数的构造器创建一个 TreeSet 对象, 则要求放入其中的元素的类必须实现 Comparable 接口所以, 在其中不能放入 null 元素;必须放入同样类的对象.(默认会进行排序) 否则可能会发生类型转换异常.我们可以使用泛型来进行限制

二、map

map两个集合之间 的映射关系,key-value键值对的形式,Map没有实现Collection接口

1、通过 map.values() 方法得到 Map 中的 value 集合

Collection<Object> value = hashMap.values();

2、通过 map.keySet() 得到 Map 的key 的集合,然后 通过 get(key) 得到 Value

Set<String> set = hashMap.keySet();

3、通过 Map.entrySet() 得到 Map 的 Entry集合,然后遍历

    Set<Map.Entry<String, Object>> entrys = hashMap.entrySet();

    for(Map.Entry<String, Object> entry: entrys){

        String key = entry.getKey();

        Object value2 = entry.getValue();

        System.out.println(key+"="+value2);

    }

Map实现类

说明

HashMap

采用Hash表算法,Map中的key不保证添加的先后顺序,key也不允许重复,判断key重复的条件是equals为true并且HashCode值相等

LinkedHashMap

采用链表和Hash算法,Map中的key会按照自然顺序进行排序,key不允许重复,key的重复的判断标准和HashMap

TreeMap

采用红黑树算法,Map中的key会按照自然顺序或定制排序进行排序,key不允许重复,判断key重复的条件是compareTo或者compare的返回值是否为0

Hashtable

采用Hash算法,是HashMap的前身(类似于Vector是ArrayList的前身),是继承Dictionary类然后再实现Map,线程安全的,性能比较低,已经弃用

Propertise

HashTable的子类,要求key和value都是String类型,用来加载资源文件(propertise文件)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在水一fang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值