精华内容
下载资源
问答
  • NULL 博文链接:https://javazeke.iteye.com/blog/487275
  • list map set区别

    2018-01-05 10:38:31
    list map set联系与区别 list map set联系与区别 list map set联系与区别
  • List Set Map区别

    2016-03-08 15:24:39
    List,Set,Map是否继承自Collection接口?  答:ListSet是,Map不是。 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。一些Collection允许相同的元素而另一些不行。一些能...
    List,Set,Map是否继承自Collection接口? 
    
    答:List,Set是,Map不是。 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java JDK不能提供直接继承自Collection的类,Java JDK提供的类都是继承自Collection的"子接口",如:List和Set。 
    注意:Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当做一组key集合,一组value集合,或者一组key-value映射。 

    List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List)。Map同样对每个元素保存一份,但这是基于"键"的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap.

    详细介绍: 
    List特点:元素有放入顺序,元素可重复 
    Map特点:元素按键值对存储,无放入顺序 
    Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) 
    List接口有三个实现类:LinkedList,ArrayList,Vector 
    LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢 
    ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低 
    Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet 
    SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现) 
    Query接口有一个实现类:LinkList 
    Map接口有三个实现类:HashMap,HashTable,LinkeHashMap 
      HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null 
    SortedMap有一个实现类:TreeMap 
    其实最主要的是,list是用来处理序列的,而set是用来处理集的。Map是知道的,存储的是键值对 
    set 一般无序不重复.map kv 结构 list 有序 。

    List的功能方法

      实际上有两种List: 一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是为快速随机访问设计的,而是具有一套更通用的方法。

      List : 次序是List最重要的特点:它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(这只推荐LinkedList使用。)一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元素。

      ArrayList : 由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和移除元素。因为那比LinkedList开销要大很多。

      LinkedList : 对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替。)还具有下列方法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 这些方法 (没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。

      Set的功能方法

      Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为负责)

      Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。

      HashSet : 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。

      TreeSet : 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。

      LinkedHashSet : 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

      Map的功能方法

      方法put(Object key, Object value)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。方法get(Object key)返回与给定“键”相关联的“值”。可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。标准的Java类库中包含了几种不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它们都有同样的基本接口Map,但是行为、效率、排序策略、保存对象的生命周期和判定“键”等价的策略等各不相同。

      执行效率是Map的一个大问题。看看get()要做哪些事,就会明白为什么在ArrayList中搜索“键”是相当慢的。而这正是HashMap提高速度的地方。HashMap使用了特殊的值,称为“散列码”(hash code),来取代对键的缓慢搜索。“散列码”是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。所有Java对象都能产生散列码,因为hashCode()是定义在基类Object中的方法。

      HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显著提高性能。

      Map : 维护“键值对”的关联性,使你可以通过“键”查找“值”

      HashMap : Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子load factor,以调整容器的性能。

      LinkedHashMap : 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。

      TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。

      WeakHashMao : 弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。

      IdentifyHashMap : 使用==代替equals()对“键”作比较的hash map。专为解决特殊问题而设计。

    展开全文
  • List,set,Map 的用法和区别 List,set,Map 的用法和区别
  • list set map list set都实现了collection接口是单列集合,list有序有索引可以重复 set无序无索引不可重复 map双列集合 key可以重复value不可以重复 list: Arraylist:底层数据结构:数组 查询快 增删慢 线程不安全 ...

    list set map
    list set都实现了collection接口是单列集合,list有序有索引可以重复 set无序无索引不可重复 map双列集合 key不可以重复value可以重复
    list:
    Arraylist:底层数据结构:数组 查询快 增删慢 线程不安全 执行效率高 初始长度10 呈1.5倍扩容
    linkedList: 底层数据结构:链表 查询慢增删快
    vector:底层数据结构:数组 查询快 增删慢 线程安全效率低(一般不用)
    set:
    hashSet:底层数据结构:哈希表 实际上是hashMap(new hashSet时底层会初始化一个hashMap)
    linkedHashSet:底层数据结构:哈希表+双向链表 继承于hashSet 底层是linkedHashMap (new linkedHashSet时底层会初始化一个LinkedHashMap)
    TreeSet:底层数据结构:红黑树 实际上是TreeMap(new TreeSet时底层会初始化一个TreeMap)
    map:
    hashMap:底层数据结构:哈希表 哈希表底层数组+链表 线程不安全 效率高
    LinkHashMap:继承与hashMap 底层哈希表+链表 链表的作用是保证有序 相当于栈这种数据结构 先put进去的 后出来
    TreeMap:底层红黑树的数据结构 按 key 排序,默认的排序方式是升序。
    hashTable:同hashMap相比 线程安全 效率低。

    数据结构:
    数组:查询快 增删慢
    有索引的存在 可以根据索引快速定位 时间复杂度为o(1) 所以查询快
    数组在内存中是连续的 长度不可变 每次增加删除 需要重新new一个出来 数据量越大效率越低 时间复杂度o(n)
    双向链表:查询慢 增删快
    链表在内存中是分散的 是由很多节点组成 每个节点都有两个值 一个是具体存储的值 一个是指向下一个节点的地址值
    增加 删除元素时 只需要改变指向下个节点的地址值即可 时间复杂度o(1)
    查询元素时 只能从前向后找 直到找到为止 时间复杂度o(n)
    哈希表:数组+链表 主干是一条数组 数组的每个节点挂了很多链表
    哈希表吸取了数组和链表各自的优点 使得增删改查速度都是非常快的
    哈希冲撞:哈希表内部有一个哈希函数 哈希函数是用来计算元素存储的位置的 一个哈希函数的好坏 决定了一个hashMap 的性能
    队列:先进先出
    栈:先进后出
    二叉树:每个节点最多有两个节点的数据结构
    二叉查找数:在二叉树的基础之上增加了排序功能
    平衡二叉查找树:最高子节点和最低子节点之间的高度差不超过1就是平衡的 红黑树是平衡二叉查找树其中的一种

    展开全文
  • List Set Map区别

    2019-10-26 14:25:40
    List Set Map区别 结构不同 ListSet 是存储单列数据的集合,Map 是存储键和值这样的双列数据的集合;List 中存储的数据是有顺序,并且允许重复;Map 中存储的数据是没有顺序的,其键是不能重复的,它的值是...

    List Set Map各自实现类区别以及底层原理和实现 最新总结

    List Set Map的区别

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

    2. 实现类
      List 接口有三个实现类 : 1、LinkedList 2、ArrayList 3 、Vector
      Map 接口有四个实现类:1、HashMap 2、Hashtable 3、TreeMap 4、LinkedHashMap
      Set 接口有两个实现类:1、HashSet 2、TreeSet

    3. 区别
      List 集合中对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象,例如通过list.get(i)方法来获取集合中的元素;Map 中的每一个元素包含一个键和一个值,成对出现,键对象不可以重复,值对象可以重复;Set 集合中的对象不按照特定的方式排序,并且没有重复对象,但它的实现类能对集合中的对象按照特定的方式排序,例如 TreeSet 类,可以按照默认顺序,也可以通过实现 Java.util.Comparator接口来自定义排序方式。

    4. 实现接口不同
      Set 和List都实现了Collection 父接口,而map没有

    List三个子类的区别
    HashMap 和 HashTable 的区别
    HashSet 和 TreeSet的区别
    并发集合和普通集合以及同步集合的区别
    数组和链表的概念区别以及应用场景

    Collection 和 Map 的集成体系

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • java中listsetmap集合的区别,及面试要点

    万次阅读 多人点赞 2019-02-28 12:33:25
    (图一) 1.面试题:你说说collection里面有什么子类。 (其实面试的时候听到这个问题的时候,你要知道,面试官是想考察ListSet) 正如图一,listset是实现了collection接口的。 (...

    Map集合:链接: Map集合的五种遍历方式及Treemap方法
    Set集合:链接: Java中遍历Set集合的三种方法
    TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法
    LIst集合:链接: Java中List集合的三种遍历方式(全网最详)
    集合区别:链接: java中list,set,map集合的区别,及面试要点

    image

                                                                                               (图一)
    

    1.面试题:你说说collection里面有什么子类。

    (其实面试的时候听到这个问题的时候,你要知道,面试官是想考察List,Set)

    正如图一,list和set是实现了collection接口的。

    image

    (图二)

    List:1.可以允许重复的对象。

    2.可以插入多个null元素。

    3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。

    4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。

    image

    (图三)

    Set:1.不允许重复对象

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

    3. 只允许一个 null 元素

    4.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器。而且可以重复

    image

    (图四)

    1.Map不是collection的子接口或者实现类。Map是一个接口。

    2.Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。

    3. TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。

    4. Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。

    5.Map 接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)

    一、Array ,Arrays
    Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。

    1、效率高,但容量固定且无法动态改变。
    array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。

    2、Java中有一个Arrays类,专门用来操作array。
    arrays中拥有一组static函数,
    equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。
    fill():将值填入array中。
    sort():用来对array进行排序。
    binarySearch():在排好序的array中寻找元素。
    System.arraycopy():array的复制。

    二、Collection ,Map

      若撰写程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。
    

    1、Collection 和 Map 的区别

      容器内每个为之所存储的元素个数不同。
      Collection类型者,每个位置只有一个元素。
      Map类型者,持有 key-value pair,像个小型数据库。
    

    2、各自旗下的子类关系

    Collection
    –List:将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。
    –ArrayList / LinkedList / Vector
    –Set : 不能含有重复的元素
    –HashSet / TreeSet
    Map
    –HashMap
    –HashTable
    –TreeMap

    3、其他特征

      List,Set,Map将持有对象一律视为Object型别。
      Collection、List、Set、Map都是接口,不能实例化。
      继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。
      vector容器确切知道它所持有的对象隶属什么型别。vector不进行边界检查。
    

    三、Collections

      Collections是针对集合类的一个帮助类。提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。
      相当于对Array进行类似操作的类——Arrays。
      如:Collections.max(Collection coll); 取coll中最大的元素。
             Collections.sort(List list); 对list中元素排序。
    

    四、如何选择?

    1、容器类和Array的区别、择取
    容器类仅能持有对象引用(指向对象的指针),而不是将对象信息copy一份至数列某位置。
    一旦将对象置入容器内,便损失了该对象的型别信息。

    2、
    在各种Lists中,最好的做法是以ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList();
    Vector总是比ArrayList慢,所以要尽量避免使用。
    在各种Sets中,HashSet通常优于HashTree(插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet。
    HashTree存在的唯一理由:能够维护其内元素的排序状态。
    在各种Maps中:HashMap用于快速查找;当元素个数固定,用Array,因为Array效率是最高的。

    结论:最常用的是ArrayList,HashSet,HashMap,Array。

    注意:

    1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。
    2、Set和Collection拥有一模一样的接口。
    3、List,可以通过get()方法来一次取出一个元素。使用数字来选择一堆对象中的一个,get(0)…。(add/get)
    4、一般使用ArrayList。用LinkedList构造堆栈stack、队列queue。

    5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。
    HashMap会利用对象的hashCode来快速找到key。
    hashing:哈希码就是将对象的信息经过一些转变形成一个独一无二的int值,这个值存储在一个array中。
    我们都知道所有存储结构中,array查找速度是最快的。所以,可以加速查找。

      发生碰撞时,让array指向多个values。即,数组每个位置上又生成一个梿表。
    

    6、Map中元素,可以将key序列、value序列单独抽取出来。
    使用keySet()抽取key序列,将map中的所有keys生成一个Set。
    使用values()抽取value序列,将map中的所有values生成一个Collection。

      为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。
    
    Collection List Set Map 区别

    在这里插入图片描述

    线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类。
    Collection
    ├List
    │├LinkedList
    │├ArrayList
    │└Vector
    │ └Stack
    └Set
    Map
    ├Hashtable
    ├HashMap
    └WeakHashMap
    Collection接口
      Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
      所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。
      如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
        Iterator it = collection.iterator(); // 获得一个迭代子
        while(it.hasNext()) {
          Object obj = it.next(); // 得到下一个元素
        }
      由Collection接口派生的两个接口是List和Set。
    List接口
    List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。
    和下面要提到的Set不同,List允许有相同的元素。
      除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。
      实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。
    LinkedList类
      LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
      注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
        List list = Collections.synchronizedList(new LinkedList(…));
    ArrayList类
      ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
      每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
      和LinkedList一样,ArrayList也是非同步的(unsynchronized)。
    Vector类
      Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。
    Stack 类
      Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。
    Set接口
      Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。
      很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。
    请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。
    Map接口
      请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
    Hashtable类
      Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。
      添加数据使用put(key, value),取出数据使用get(key),这两个基本操作的时间开销为常数。
      Hashtable通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。
    使用Hashtable的简单示例如下,将1,2,3放到Hashtable中,他们的key分别是”one”,”two”,”three”:
        Hashtable numbers = new Hashtable();
        numbers.put(“one”, new Integer(1));
        numbers.put(“two”, new Integer(2));
        numbers.put(“three”, new Integer(3));
      要取出一个数,比如2,用相应的key:
        Integer n = (Integer)numbers.get(“two”);
        System.out.println(“two = ” + n);
      由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作。
      如果相同的对象有不同的hashCode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个。
      Hashtable是同步的。
    HashMap类
      HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。
    WeakHashMap类
      WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。
    总结
      如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
      如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
      要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
      尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。

    展开全文
  • SetMapList三种集合的差别

    万次阅读 多人点赞 2019-05-30 16:15:27
    1.集合类型主要有3种:set(集)、list(列表)和map(映射)。 2.三者关系 3.Set set接口时Collection接口的一个子接口,是无序的,set中不包含重复的元素,也就是说set中不存在两个这样的元素a1.equals(a2)结果为...
  • ListSet是存储单列数据的集合,Map是存储键值对的双列数据的集合; Python中的map()函数 用法:map(function, iterable, …) 参数function: 传的是一个函数名,可以是python内置的,也可以是自定义的。 ...
  • list set map区别

    2016-11-03 21:54:47
    版权声明:本文为博主原创文章,未经博主允许不得转载。 ... java集合的主要分为三种类型: ... 1)Set(集)  ... 2)List(列表)  ... 3)Map(映射) ...Collection:ListSet(即ListSet实现了Collection
  • List,Set,Map区别

    千次阅读 2018-07-26 22:48:07
    首先ListSet都是单列元素的集合,它们有一个共同的父接口Collection。 List 特点: 元素有放入顺序,元素可重复 存元素:多次调用add(Object)方法时,每次加入的对象按先来后到的顺序排序,也可以插队,即...
  • ListMapSet区别与联系 一、结构特点1、ListSet是存储单列数据的集合,Map是存储键值对这样的双列数据的集合。 2、List中存储的数据是有顺序的,并且值允许重复。 Set中存储的数据是无顺序的,并且不允许...
  • java中listsetmap区别
  • list set map 区别

    2015-08-04 14:53:26
    List(列表):元素是有序的,元素可以重复。因为该集合体系有索引。 set(集合):中的对象中按特定的方式排序,并且没有重复对象。 Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
  • <p>ListSetMap 之间的区别是什么?</p>
  • java 常用集合listSetMap区别及适用场景总结

    万次阅读 多人点赞 2016-06-03 09:51:42
    listSetMap区别及适用场景
  • Java中List Set Map 区别简单分析

    千次阅读 2016-09-06 18:08:25
    小编最近在调试接口的时候遇到棘手的问题,在和后台对接的...导致加密后的密文不一致,所以一直接口调试不同,为此自己去网上看了map相关知识,最终使用了TreeMap解决了问题,由于个人好奇心爆棚,所以自己就去网上看了
  • ListSetMap区别

    千次阅读 2018-11-10 17:44:59
    ListSet是存储单列数据的集合,Map是存储键和值这样的双列数据的集合; List中存储的数据是有顺序,并且允许重复; Map中存储的数据是无序的,其键是不能重复的,但是值是可以重复的;Set中存储的数据是无序的,...
  • Java基本容器类包括:ListSet,Queue,Map ListSet,Queue继承自Collection Set 接口实现类包括 HashSet,TreeSet,LinkedHashSet。 不保存重元素 HashSet:最快获取元素方式,快速查找 TreeSet:按照比较结果...
  • Collection集合下,有ListSet这些接口,这些接口有哪些区别,什么情况下可以使用呢。Map集合该如何使用呢,如何遍历呢?
  • Java集合的主要分为三种类型set集,list列表,map映射,接下来通过本文给大家详细介绍java中listSetMap之间的区别,需要的的朋友参考下吧
  • c++容器list、vector、mapset区别 list 封装链表,以链表形式实现,不支持[]运算符。 对随机访问的速度很慢(需要遍历整个链表),插入数据很快(不需要拷贝和移动数据,只需改变指针的指向)。 新添加的元素,...
  • listset 有共同的父类Collection,它们的用法也是一样的,唯一的不同就是set中不能有相同的元素而list中可以。 listset的用途非常广泛 list可以完全代替数组来使用。 map 是独立的合集,它使用键值对的方式来...
  • listset区别: 如下图所示:list中可以有重复元素,set中不可以。 具体解释: 1.list:ArrayList和LinkedList是我们常用的数据结构,它们都是线性表,ArrayList是顺序存储的线性表,LinkedList是链式...
  • 介绍java中listsetmap区别

    万次阅读 2019-02-15 11:02:18
    介绍java中listsetmap区别
  • 一、前言: 1. List: 有序、可重复。通过索引查找快,增删速度慢 (操作时后续...根据键得到值,对 map 集合遍历时先得到键的 set 集合,对 set 集合进行遍历,得到相应的值。 二、具体对比: 1. List ArrayList ...
  • ArrayList: 数组实现的底层架构,先进后出原则,有序存储,因为元素都有索引,队尾添加元素快,查询以及替换元素效率高,线程不安全。 LinkedList: 双向链表作为底层架构,先进先出原则,有序存储,因为是通过地址...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 165,404
精华内容 66,161
关键字:

listsetmap区别