三大集合:List、Map、Set的区别与联系

List、Map、Set的区别与联系

一、结构特点

  1. ListSet是存储单列数据的集合Map是存储键值对这样的双列数据的集合
  2. List中存储的数据是有顺序的,并且值允许重复;
  3. Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的;
  4. Set中存储的数据是无顺序的,并且不允许重复,但元素在集合中的位置是由元素的hashcode决定,即位置是固定的(Set集合是根据hashcode来进行数据存储的,所以位置是固定的,但是这个位置不是用户可以控制的,所以对于用户来说set中的元素还是无序的)。

二、实现类

  1. List接口有三个实现类:

    1.1 LinkedList

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

    1.2 ArrayList

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

    1.3 Vector

    基于数组实现,线程安全,效率低,增删慢,查找慢;

  2. Map接口有四个实现类:

    2.1 HashMap

    基于 hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null

    键;

    2.2 HashTable

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

    2.3 LinkedHashMap

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

    2.4 SortMap 接口

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

  3. Set接口有两个实现类:

    3.1 HashSet

    底层是由 Hash Map 实现,不允许集合中有重复的值,使用该方式时需要重写 equals()和 hash Code()方法;

    3.2 LinkedHashSet

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

3 区别

  1. List 集合中对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象,例如通过list.get(i)方法来获取集合中的元素;

  2. Map 中的每一个元素包含一个键和一个值,成对出现,键对象不可以重复,值对象可以重复;

  3. Set 集合中的对象不按照特定的方式排序,并且没有重复对象,但它的实现类能对集合中的对象按照特定的方式排序,例如 Tree Set 类,可以按照默认顺序,也可以通过实现 Java.util.Comparator<     Type >接口来自定义排序方式。

4 补充:HashMapHashTable

  HashMap 是线程不安全的,HashMap 是一个接口,是 Map的一个子接口,是将键映射到值得对象,不允许键值重复,允许空键和空值;由于非线程安全, HashMap的效率要较 HashTable 的效率高一些.

  HashTable 是线程安全的一个集合,不允许 null 值作为一个 key 值或者 Value 值;

  HashTablesychronize(同步化),多个线程访问时不需要自己为它的方法实现同步,而 HashMap 在被多个线程访问的时候需要自己为它的方法实现同步;

原文地址:https://www.cnblogs.com/677-code/p/9738652.html

时间: 2024-10-09 07:05:13

三大集合:List、Map、Set的区别与联系的相关文章

《深入理解ES6》之Set集合与Map集合

Set集合 Set类型是一种有序列表,其中含有一些相互独立的非重复,通过Set集合可以快速访问其中的数据,更有效地追踪各种离散值. 创建Set集合并添加元素 调用new Set()创建Set集合,调用add()方法向集合添加元素,访问集合的size属性可以获取集合中目前的元素数量,访问has()方法可以检测Set集合中是否存在某个值.抵用delete()方法可以移除Set集合中的某一个元素,调用clear()方法会移除集合中的所有元素. let set=new Set(); set.add(5)

Collection List Set和Map用法与区别

labels:Collection List Set和Map用法与区别 java 散列表 集合 Collection           接 口的接口      对 象的集合   ├   List                    子接口         按进入先后有序保存      可 重复   │├   LinkedList                 接口实现类      链表      插入删除      没有同步      线程不安全   │├   ArrayList     

Java中Set Map List 的区别

java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list   --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构,健值必须具有唯一性(键不能同,否则值替换) List按对象进入的顺序保存对象,不做排序或编辑操作.Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List).Map同样对每个元素保存一份,但这是基于"键"的,Ma

集合(3)——Map集合

Map用于保存具有映射关系的数据,因此Map集合里保存着两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value,key和value都可以是任何引用类型的数据.Map的key不允许重复,即同一个Map对象的任何两个key通过equals()方法比较总是返回false. key和value之间存在单向一对一关系,即通过指定的key,总能找到唯一的,确定的value.从Map中取出数据时,只要给出指定的key,就可以取出对应的value. Set和Map之间的关系非常密切,虽然

查询字符串中字母的个数(两种实现方式1,list与set集合 2,map集合)

题目: 取出一个字符串中字母出现的次数.如:字符串:"abcde%^kka27qoq" ,输出格式为:a(2)b(1)k(2)... 第一种方式(set和list结合使用): package itheima; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; /** * .取出一个字符串中字母出现的次数.如:字符串:"

集合框架-Map

 Map集合 * 1.Map集合中存储的是一对儿元素.键和值.之间存在着对应关系. * 2.必须要保证键的唯一性. * 3.如果存储键相同,值会覆盖. 集合框架-Map-常见方法 put(K key, V value)     将指定的值与此映射中的指定键关联(可选操作). 返回: 返回与 key 相关联的先前值,如果 key 没有映射关系,则返回 null(返回 null 可能还表示映射以前将 null 与指定键关联) get(Object key) 返回: 指定键所映射的值:如果此映射不包含

Java基础知识强化之集合框架笔记52:Map集合之Map集合的遍历 键找值

1. Map集合的遍历  Map -- 夫妻对 思路:  A:把所有的丈夫给集中起来.  B:遍历丈夫的集合,获取得到每一个丈夫.  C:让丈夫去找自己的妻子.  转换:  A:获取所有的键  B:遍历键的集合,获取得到每一个键  C:根据键去找值 2. 代码示例: 1 package cn.itcast_01; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 import java.util.Set; 6 7 public cla

Java基础知识强化之集合框架笔记53:Map集合之Map集合的遍历 键值对对象找键和值

1. Map集合的遍历(键值对对象找键和值) Map -- 夫妻对  思路:  A: 获取所有结婚证的集合  B: 遍历结婚证的集合,得到每一个结婚证  C: 根据结婚证获取丈夫和妻子 转换:  A: 获取所有键值对对象的集合  B: 遍历键值对对象的集合,得到每一个键值对对象  C: 根据键值对对象获取键和值 2. 代码示例: 1 package cn.itcast_01; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 impo

Collection集合 和 Map

Collection |--List:元素是有序的,元素可以重复.因为该集合体系有索引.|--ArrayList:底层的数据结构使用的是数组结构.特点:查询速度很快.但是增删稍慢.线程不同步. List集合特有的迭代器.ListIterator是Iterator的子接口. List两种取出方式:1循环,2迭代 |--LinkedList:底层使用的链表数据结构.特点:增删速度很快,查询稍慢.线程不同步.|--Vector:底层是数组数据结构.线程同步.被ArrayList替代了.因为效率低. 在