List、Set、Map区别

三者关系如下:


结构特点

1.List和Set是存储单列数据集合,Map是存储键值对这样的双列数据集合;

2.List中存储的数据都是有序的,并且允许重复;Map中存储的数据是无序的,它的键是不允许重复的,值可以重复;Set存储的数据是无序的,并且不允许重复,元素在集合中的位置,是由元素的hashCode决定,位置是固定的。

 实现类

1.基于List接口实现的类。

     1.linkedList

        基于链表实现,链表内存是散列的,增删快,查询慢

    2.ArrayList

        基于数组实现的,非线程安全,效率高,查询快,增删慢

    3.Vector

        基于数组实现的,线程安全,效率低,增删慢,查询慢,用到很少

2.基于Set接口实现的类。

    1.HashSet

        基于HashMap实现,不允许集合中有重复的值,使用该方式时需要重写 equals()和 hash Code()方法;

    2.LinkedHashSet

        继承于 HashSet,同时又基于 LinkedHashMap 来进行实现,底层使用的是 LinkedHashMap。

3.基于Map接口实现的类。

    1.HashMap

        基于 hash 表的 Map 接口实现,非线程安全,高效;

    2.HashTable

        线程安全,效率低,不支持null键和值

    3.LinkedHashMap

        是 HashMap 的一个子类,保存了记录的插入顺序;

    4.SortMap接口

        TreeMap,能够把它保存的记录根据键排序,默认是键值的升序排序

 区别

 List

  • 允许重复对象

  • 可以插入多个null元素

  • 是一个有序容器

 Set

  • 不允许重复对象

  • 无序容器,无法保证每个元素的存储顺序,TreeSet通过Comparator或者Comparable维护了一个排序的顺序

  • 只允许一个null元素

 Map

  • Map不是Collection的子接口或者实现类,Map是一个接口。

  • Map的键对象必须唯一,只允许存在一个null键。

  • TreeMap通过Comparator或者Comparable维护了一个排序的顺序。

一、基础篇--1.2Java集合-List、Set、Map区别的更多相关文章

  1. 一、基础篇--1.2Java集合-Arraylist 与 LinkedList 区别

     Arraylist 与 LinkedList 区别  结构上的区别 ArrayList底层实现基于动态数组,LinkedList底层实现基于双向链表.  性能上区别 ArrayList查询快,增删慢 ...

  2. 一、基础篇--1.2Java集合-HashMap和ConcurrentHashMap的区别【转】

    http://www.importnew.com/28263.html 今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍.本来以为花不了多少时间的,不 ...

  3. 一、基础篇--1.2Java集合-HashMap死循环问题

    为什么HashMap会出现死循环 首先,我们知道java的HashMap不是线程安全的.多线程下应该使用ConcurrentHashMap. HashMap底层是基于动态数组和单向链表(JDK1.7, ...

  4. 一、基础篇--1.2Java集合-HashMap和HashSet的区别

     HashMap和HashSet的区别 1.HashMap实现的是Map接口,HashSet实现的是Set接口 2.结构不一样,一个存储的是键值对,一个存储的是对象 3.HashMap存储的值可能相同 ...

  5. 一、基础篇--1.2Java集合-HashMap和HashTable的区别

    HashMap和HashTable的区别 1.继承的父类不同,HashMap继承的是AbstractMap类,HashTable继承的是Dictionary类,不过都实现了Map.Clone.Seri ...

  6. 一、基础篇--1.2Java集合-HashMap源码解析

    https://www.cnblogs.com/chengxiao/p/6059914.html  散列表 哈希表是根据关键码值而直接进行访问的数据结构.也就是说,它能通过把关键码值映射到表中的一个位 ...

  7. 一、基础篇--1.2Java集合-ArrayList和Vector的区别

     ArrayList和Vector的区别 ArrayList和Vector都是基于动态数组实现的.  区别 ArrayList是非线程安全的,Vector是线程安全的. Vector的方法都加了同步锁 ...

  8. Java基础从数组到集合之间关键字的区别!!!!

    1.&& 和 &区别和联系: 相同点 : 结果是一样的.       不同点 :如果使用双&号判断,如果说条件一为false,不会判断条件二,但是单&号会继续判 ...

  9. Java基础——从数组到集合之间关键字的区别!!!!

    1.&& 和 &区别和联系: 相同点 : 结果是一样的.       不同点 :如果使用双&号判断,如果说条件一为false,不会判断条件二,但是单&号会继续判 ...

随机推荐

  1. Vue实例:vue2.0+ElementUI框架开发pc项目

    开发前准备 vue.js2.0中文,项目所使用的js框架 vue-router,vue.js配套路由 vuex,状态管理 Element,UI框架 1,根据官方指引,构建项目框架 安装vue npm ...

  2. 用原生js来写一个swiper滑块插件

        是不是有点印象了,没错,他的最基本的用法就是左右滑动,插件使用者只需要写几行简单的html和js即可实现一个简单滑动效果,不过你完全可以组合各种元素来适应不同的场景. 当然插件我已经写好了,咱 ...

  3. 第十四篇 JS实现加减乘除 正则表达式

    JS实现加减乘除 这节课,将会继续使用到if判断,会让同学们再看到一个新的,else if判断语句,意思是:否则如果,是基于if下的判断语句,就是说,if不成立则再来判断else if,可以这样,假如 ...

  4. 设置VMware 以及指定 虚拟机 ,开机自启动

    进入开机自启动目录 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 重命名为 start.bat 编辑 这个文件,编辑之后Ct ...

  5. deep_learning_Function_tf.identity()

    这两天看batch normalization的代码时,学到滑动平均窗口函数ExponentialMovingAverage时,碰到一个函数tf.identity()函数,特此记录. tf.ident ...

  6. Centos7 下Yum安装OpenLdap

    网上的教程一大堆,也没用具体说明版本,所以很多操作方法都不一样,把我踩过的坑记录下来 环境: Centos7 OpenLdap 2.4.44 openldap新版本和老版本的配置方法差别特别大 安装步 ...

  7. Import Error:cannot import name main解决方案

    在Ubuntu上安装软件,不小心升级了pip,导致使用时报错如下: Import Error:cannot import name main 后来发现是因为将pip更新为10.0.0后库里面的函数有所 ...

  8. python出现Non-ASCII character '\xe6' in file statistics.py on line 19, but no encoding declared错误

    可按照错误建议网址查看http://www.python.org/peps/pep-0263.html 发现是因为Python在默认状态下不支持源文件中的编码所致.解决方案有如下三种: 一.在文件头部 ...

  9. Linux下内存查看及详解

    在Linux下面,我们常用top命令来查看系统进程,top也能显示系统内存.我们常用的Linux下查看内容的专用工具是free命令. Linux下内存查看命令free详解: 在Linux下查看内存我们 ...

  10. k8sConfigMap资源

    ConfigMap对象用于为容器中的应用提供配置数据以定制程序的行为,不过敏感的配置信息,例如密钥.证书等通常由Secret对象来进行配置.他们将相应的配置信息保存于对象中,而后在pod资源上以存储卷 ...