精华内容
下载资源
问答
  • 有序和无序:这里的有序和无序不是指集合中的排序,而是是否按照元素添加的顺序来存储对象。 Map: Map是无序的,它的存储结构是哈希表<key,value>键值对,map中插入元素是根据key计算出的哈希值来存储元素的...

    Map、Set集合存放是无序的,然而LinkedHashSet和LinkedHashMap等集合却有序,请解释这是什么原因?

    有序和无序:这里的有序和无序不是指集合中的排序,而是是否按照元素添加的顺序来存储对象。

    Map:

    Map是无序的,它的存储结构是哈希表<key,value>键值对,map中插入元素是根据key计算出的哈希值来存储元素的,因此他不是按照元素的添加顺序来存储对象的,所以Map是无序的。它的实现类有:HashMap、TableMap和TreeMap。

    其中LinkedHashMap是有序的,hashMap用来保证存储的值键值对,list用来保证插入的顺序和存储的顺序一致。

    LinkedHashMap:

    HashMap和双向链表合二为一即是LinkedHashMap。所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表的HashMap。由于LinkedHashMap是HashMap的子类,所以LinkedHashMap自然会拥有HashMap的所有特性。比如,LinkedHashMap的元素存取过程基本与HashMap基本类似,只是在细节实现上稍有不同。当然,这是由LinkedHashMap本身的特性所决定的,因为它额外维护了一个双向链表用于保持迭代顺序。

    它相当于是在HashMap中插入了一个双向链表,然后每次插入的数据按照插入的顺序来进行排序,它相当于定义了一个双向链表,来把所有的Entry串联起来。并不保存Key和Value

    LinkedHashMap增加了时间和空间上的开销,但是它通过维护一个额外的双向链表保证了迭代顺序。特别地,该迭代顺序可以是插入顺序,也可以是访问顺序。

    LinkedHashMap相对于HashMap,增加了双链表的结果(即节点中增加了前后指针),其他处理逻辑与HashMap一致。

    Set:

    Set是无序的,并且set中的元素不能重复。set的底层实现其实是Map,它是计算key的哈希值来确定元素在数组中的存放位置,所以是无序的,应为在Map中key的值不能重复,所以set中的元素不能重复。它的实现类有:haseSet、TreeSet。

    LinkedHashSet:

    LinkedHashSet集合也是根据元素hashCode值来决定元素存储位置,但它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。也就是说,当遍历LinkedHashSet集合里元素时,HashSet将会按元素的添加顺序来访问集合里的元素。

    LinkedHashSet需要维护元素的插入顺序,因此性能略低于HashSet的性能,但在迭代访问Set里的全部元素时将有很好的性能,因为它以链表来维护内部顺序。

    LinkedHashSet是Set集合的一个实现,具有set集合不重复的特点,同时具有可预测的迭代顺序,LinkedHashSet包含两个参数:初始化容量和载入属性。

    对于LinkedHashSet而言,它继承与HashSet、又基于LinkedHashMap来实现的。LinkedHashSet底层使LinkedHashMap来保存所有元素,它继承与HashSet,其所有的方法操作上又与HashSet相同,因此LinkedHashSet 的实现上非常简单,只提供了四个构造方法,并通过传递一个标识参数,调用父类的构造器,底层构造一个LinkedHashMap来实现,在相关操作上与父类HashSet的操作相同,直接调用父类HashSet的方法即可。 对于LinkedHashSet而言,它继承与HashSet、又基于 LinkedHashMap来实现的。

    LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序。

    LinkedHashSet集合也是根据元素的hashCode值来决定元素的存储位置,但和HashSet不同的是,它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。当遍历LinkedHashSet集合里的元素时,LinkedHashSet将会按元素的添加顺序来访问集合里的元素。

    双向链表:

    双向链表是链表的一种,它的每个数据节点都有两个指针分别指向直接后继和直接前驱,所以从双向链表的任意一个节点开始都可以很方便的访问它的前驱节点和后继节点。这是双向链表的优点,缺点是每个节点都需要保存当前节点的next和prev两个属性,这样才能保证优点。所以需要更多的内存开销,并且删除和添加也会比较费时间。

    下图是双向链表的节点:
    prve指向上一个结点,next指向下一个结点

    多个节点相互连接,保证了数据录入的顺序。

     

     

    ____________________________________________________________________________________________________

     
     

    Map集合:

    Map用于保存具有映射关系的数据,总是以键值对的方式存储数据。Map集合的key和value都可以是任何引用类型的数据。Map集合的key不允许重复,value允许重复。key和value之间存在单向一对一关系,即通过指定的键可以找到唯一,确定的value。Map集合中获取数据时,只要给出指定的key,就可以取出对应的value。

     

     Hashtable是java一开始发布时就提供的键值映射的数据结构,而HashMap产生于JDK1.2。虽然Hashtable比HashMap出现的早一些,但是现在Hashtable基本上已经被弃用了。而HashMap已经成为应用最为广泛的一种数据类型了。造成这样的原因一方面是因为Hashtable是线程安全的,效率比较低。
     

    HashMap和Hashtable实现类

    HashMap和Hashtable都是Map接口的典型实现类,Hashtable是一个古老的集合,JDK1.0起就出现了。

    HashMap和Hashtable的典型区别:

    (1)Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的实现。所以HashMap比Hashtable的性能高一点。

    (2)Hashtable不允许使用null作为key和value。

    Hashtable既不支持Null key也不支持Null value。Hashtable的put()方法的注释中有说明 。

    HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,可能是 HashMap中没有该键,也可能使该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。
     

    注意:HashMap和Hashtable判断两个key相等的标准是:两个key通过equals方法比较返回true,两个key的hashCode值也要相等。
    HashMap和Hashtable包含一个containsValue方法用于判断是否包含指定vlaue,HashMap和Hashtable判断值相等的标准:只要两个对象通过equals方法比较返回true即可。

     

    (1)java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。

     Collection   
    ├List   
    │├LinkedList   
    │├ArrayList   
    │└Vector   
    │ └Stack   
    └Set 

    (2)java.util.Collections 是一个包装类(工具类/帮助类)。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,用于对集合中元素进行排序、搜索以及线程安全等各种操作,服务于Java的Collection框架。
    代码示例:

    import java.util.ArrayList; 
    import java.util.Collections; 
    import java.util.List; 
      
    public class TestCollections { 
          
        public static void main(String args[]) { 
            //注意List是实现Collection接口的 
            List list = new ArrayList(); 
            double array[] = { 112, 111, 23, 456, 231 }; 
            for (int i = 0; i < array.length; i++) { 
                list.add(new Double(array[i])); 
            } 
            Collections.sort(list); 
            for (int i = 0; i < array.length; i++) { 
                System.out.println(list.get(i)); 
            } 
            // 结果:23.0 111.0 112.0 231.0 456.0 
        } 
    }

     

    展开全文
  • **有序和无序:**这里的有序和无序不是指集合中的排序,而是是否按照元素添加的顺序来存储对象。 Map: Map是无序的,它的存储结构是哈希表<key,value>键值对,map中插入元素是根据key计算出的哈希值来存储...

    Map、Set集合存放是无序的,然而LinkedHashSet和LinkedHashMap等集合却有序,请解释这是什么原因?

    有序和无序:这里的有序和无序不是指集合中的排序,而是是否按照元素添加的顺序来存储对象。

    Map:

    Map是无序的,它的存储结构是哈希表<key,value>键值对,map中插入元素是根据key计算出的哈希值来存储元素的,因此他不是按照元素的添加顺序来存储对象的,所以Map是无序的。它的实现类有:HashMap、TableMap和TreeMap。

    其中LinkedHashMap是有序的,hashMap用来保证存储的值键值对,list用来保证插入的顺序和存储的顺序一致。

    LinkedHashMap:

    HashMap和双向链表合二为一即是LinkedHashMap。所谓LinkedHashMap,其落脚点在HashMap,因此更准确地说,它是一个将所有Entry节点链入一个双向链表的HashMap。由于LinkedHashMap是HashMap的子类,所以LinkedHashMap自然会拥有HashMap的所有特性。比如,LinkedHashMap的元素存取过程基本与HashMap基本类似,只是在细节实现上稍有不同。当然,这是由LinkedHashMap本身的特性所决定的,因为它额外维护了一个双向链表用于保持迭代顺序。

    它相当于是在HashMap中插入了一个双向链表,然后每次插入的数据按照插入的顺序来进行排序,它相当于定义了一个双向链表,来把所有的Entry串联起来。并不保存Key和Value

    LinkedHashMap增加了时间和空间上的开销,但是它通过维护一个额外的双向链表保证了迭代顺序。特别地,该迭代顺序可以是插入顺序,也可以是访问顺序。

    LinkedHashMap相对于HashMap,增加了双链表的结果(即节点中增加了前后指针),其他处理逻辑与HashMap一致。

    Set:

    Set是无序的,并且set中的元素不能重复。set的底层实现其实是Map,它是计算key的哈希值来确定元素在数组中的存放位置,所以是无序的,应为在Map中key的值不能重复,所以set中的元素不能重复。它的实现类有:haseSet、TreeSet。

    LinkedHashSet:

    LinkedHashSet是Set集合的一个实现,具有set集合不重复的特点,同时具有可预测的迭代顺序,LinkedHashSet包含两个参数:初始化容量和载入属性。

    对于LinkedHashSet而言,它继承与HashSet、又基于LinkedHashMap来实现的。LinkedHashSet底层使LinkedHashMap来保存所有元素,它继承与HashSet,其所有的方法操作上又与HashSet相同,因此LinkedHashSet 的实现上非常简单,只提供了四个构造方法,并通过传递一个标识参数,调用父类的构造器,底层构造一个LinkedHashMap来实现,在相关操作上与父类HashSet的操作相同,直接调用父类HashSet的方法即可。 对于LinkedHashSet而言,它继承与HashSet、又基于 LinkedHashMap来实现的。

    LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可为插入顺序或是访问顺序。

    LinkedHashSet集合也是根据元素的hashCode值来决定元素的存储位置,但和HashSet不同的是,它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的。当遍历LinkedHashSet集合里的元素时,LinkedHashSet将会按元素的添加顺序来访问集合里的元素。

    双向链表:

    双向链表是链表的一种,它的每个数据节点都有两个指针分别指向直接后继和直接前驱,所以从双向链表的任意一个节点开始都可以很方便的访问它的前驱节点和后继节点。这是双向链表的优点,缺点是每个节点都需要保存当前节点的next和prev两个属性,这样才能保证优点。所以需要更多的内存开销,并且删除和添加也会比较费时间。

    下图是双向链表的节点:
    prve指向上一个结点,next指向下一个结点
    在这里插入图片描述
    多个节点相互连接,保证了数据录入的顺序。

    展开全文
  • 集合:长度可变化,存放数据可不一致,但必须是引用类型数据集合java集合主要由MapCollection派生由来,collection是高度抽象集合类,包含了集合里的基本方法属性,map为一个映射接口,则有值键对。...

    集合和数组主要区别:

    数组:长度固定,存放数据类型一致;

    集合:长度可变化,存放数据可不一致,但必须是引用类型数据

    集合:java集合主要由Map和Collection派生由来,collection是高度抽象集合类,包含了集合里的基本方法和属性,map为一个映射接口,则有值键对。

    8298c7710292859601970f5fae8dc969.png

    Collection :

    List:有序可重复

    ArrayLIst

    LinkedList

    Vectory

    Stack;

    set:无序不可重复

    Hashset

    Treeset

    Linkedset

    List下子类区别;

    ArrayList - LinkedList - Vector- Stack特点

    ArrayList : 异步,线程不安全,执行效率高;底层使用数组,存读效率高,插入删除效率低

    LinkedList:异步,使用双向链表,插入删除效率高

    Vector: 同步,线程安全,执行效率较低

    Stack:继承Vector

    从数据增长的角度看:

    ArrayList和Vector都是使用数组(Array)来控制集合中的对象。

    当你向两种类型中增加元素的时候,如果元素的数目超过了内部数组目前的长度他们都需要扩展内部数组的长度。

    Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%。

    所以如果你要在集合中保存大量的数据,那么使用Vector有一些优势。

    Map

    HashMap

    TreeMap

    HashMap - TreeMap特点

    HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。

    HashMap的结果是没有排序的,而TreeMap输出的结果是排好序的。

    展开全文
  • 1.List 有序,可重复ArrayList:底层数据结构是数组,查询快,增删慢。线程不安全,效率高Vector:底层数据结构是数组,查询快,增删慢。线程安全,效率低LinkedList:底层数据结构是链表,查询慢,增删快。线程不...

    1.List     有序,可重复

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

    Vector:底层数据结构是数组,查询快,增删慢。线程安全,效率低

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

    2.Set     唯一(Set判断两个对象相同是根据equals方法)

    HashSet:底层数据结构是哈希表。 无序唯一,如何保证元素唯一性的呢?依赖两个方法:hashCode()和equals()开发中自动生成这两个方法即可

    LinkedHashSet:底层数据结构是链表+哈希表,有序(插入顺序)唯一,由链表保证元素有序,由哈希表保证元素唯一

    TreeSet:底层数据结构是红黑树。有序(元素升序)唯一,如何保证元素排序的呢?自然排序比较器排序 如何保证元素唯一性的呢?根据比较的返回值是否是0来决定

    3.Map     键值对

    HashMap:底层是哈希表数据结构,无序,最多只允许一条记录的键为Null;允许多条记录的值为 Null,线程不安全

    Hashtable:不允许记录的键或者值为空,线程安全

    LinkedHashMap:按照记录的插入顺序,

    TreeMap:底层是二叉树数据结,按照键排序,默认是按键值的升序排序,线程不安全

    //排序

    Iterator it =hsMap.entrySet().iterator();while(it.hasNext()) {

    Map.Entry e=(Map.Entry) it.next();

    System.out.println("Key: " + e.getKey() + "--Value: "

    +e.getValue());

    }

    keySet是键的集合,Set里面的类型即key的类型

    entrySet是 键-值 对的集合,Set里面的类型是Map.Entry

    使用entrySet则必须将map对象转换为Map.Entry,keySet则不需要

    展开全文
  • Java集合ArrayListLinkedList区别

    千次阅读 2019-07-11 11:53:51
    Java集合大致可以分为Set、List、QueueMap四种体系,其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map则代表具有映射关系的集合;Queue体系集合,代表一种队列集合实现。 jdk1.4以前没有Queue...
  • 一个对象是该集合中的一个元素List : 容许在集合中存在相同的对象Set : 不容许在集合中存在相同的对象Map:一组对象是该集合中的一个元素,该元素分为键部分值部分键部分不容许重复,但值部分容许重复有序集合:...
  • Java集合List,MapSet的区别

    千次阅读 2014-07-20 01:55:57
    Java集合List,MapSet的区别 1、ListSet的父接口是Collection,而Map不是 2、List中的元素是有序的,可以重复的 3、Map是Key-Value映射关系,且Key不能重复 4、Set中的元素是无序的,不可...
  • java中的集合和区别

    2015-11-20 01:58:00
    Iterator接口是负责定义访问遍历元素的接口 Connection接口存储了一组不唯一(允许重复)的无序对象 Set接口继承了Connection接口,主要用来存储一组唯一(不允许重复的),无序对象 Map接口存储了一组键值对的...
  • 分类: Java集合类图解 Collection集合特点: 1.2.1一些 collection 允许有重复的元素,而另一些则不允许 1.2.2一些 collection 是有序的,而另一些则是无序的 【有序是指与添加的顺序一致,并非是按照...
  • List、SetMap的区别 List Set Map 元素顺序 有序 无序 key无序、value无序 元素是否可重复 可重复 不可重复 key不可重复、value可重复 List 注意:List中存储的元素有序,指...
  • Collection接口,集合结构总的父接口,有两个子接口listsetList接口 元素有序可重复.实现类有:ArrayList 数组实现轻量级,运行快,线程不安全。JDK1.2 查询快Vector 数组实现重量级,运行慢,线程安全。JDK1.0...
  • (注意:set集合虽然无放入顺序,但是元素在set中的位置是由Hashcode决定的,加入Set的Object必须定义equals()方法,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代...
  • Redis数据结构---------有序集合有序集合和集合类似,只是说它是有序的,和无序集合的主要区别在于每一个元素除了值之外,它还会多一个分数。分数是一个浮点数,在Java中是 使用双精度表示的,对于每一个元素都是...
  • 1.2.2一些 collection 是有序的,而另一些则是无序的 【有序是指与添加的顺序一致,并非是按照一定的要求来排列形成的有序,如从大到小,小到大等】 Collections 在类中还用一个Collection功能能类似的工具类...
  • Java集合框架 Java集合框架 Collection:存储单列数据 List :存储有序、可重复的数据 ArrayList:常用,查找效率高,线程不安全,底层的数据结构是数组。 LinkedList :插入删除的效率高,线程不安全,底层的...
  • 1. 先说CollectionCollection 层次结构 中的根接口。...一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set List)实现。此接口通常用来传递 collec
  • List,继承Collection,可重复、有序的对象Set,继承Collection,不可重复、无序的对象Map,键值对,提供key到value的映射。key无序、唯一;value无序,可重复2、集合类结构图3、集合特性比较线程安全的效率都比较.....
  • 集合如上图集合架构图所示,常用的集合有:ListLinkedListArrayListVectorSetHashSetTreeSetMapHashTableHashMapTreeMap2.ListSet的区别List是有序的并且元素可以重复存在,Set是无序的,元素是唯一的,基于以上...
  • Redis有序集合详解

    2020-03-20 17:32:19
    有序集合和集合类似,只是说它是有序的,和无序集合的主要区别在于每一个元素除了值之外,它还会多一个分数。分数是一个浮点数,在 Java 中是使用双精度表示的,根据分数,Redis 就可以支持对分数从小到大或者从大到...
  • java集合

    2021-01-04 11:03:41
    Java集合 1. list set 的区别 list 有序 可重复 set 无序 不可重复 2. Collections Collection 的区别 java 工具类的命名 习惯 + s Collections 集合工具类 Collection 集合顶层接口 3. ArrayList ...
  • 一、集合类与数组的区别1.集合的长度可变,数组的长度固定;2.集合用来存放对象引用,数组用来存放基本类型的数据;二、集合类的关系1.Collection接口存储一组不唯一、无序的对象。2.List接口存储一组不唯一、有序...
  • 1、 Set代表无序、不可重复的集合2、 List代表有序、重复的集合3、 Map代表具有映射关系的集合4、 Queue是一种队列集合的实现Java集合和数组的区别?1、 数组的长度在初始化时指定,意味着只能保存定长的数据。而...
  • 有序集合和集合类似,只是说它是有序的,和无序集合的主要区别在于每一个元素除了值之外,它还会多一个分数。分数是一个浮点数,在 Java 中是使用双精度表示的,根据分数,Redis 就可以支持对分数从小到大或者从大到...
  • Java集合

    2019-02-26 09:11:05
    1.Java集合类框架的基本接口... 其中ListSet接口继承了Collection接口,List是有序元素集合,Set是无序元素集合;ArrayList、 LinkedList Vector实现了List接口,HashSet、LinkedHashSetTreeSet实现...
  • List是有序的值允许重复,每次插入数据,不是把对象本身存储到集合中,而是在集合中用一个索引变量指向这个对象。Set是无序的不允许有重复的值出现。Map集合是存储双列数据的集合,存储的数据是无序的,键不可以重复...
  • 1、listset继承自collection,而map不是2、list:采用线性方式存储,集合有序的,元素可以重复ArrayList:查询速度比较快,linkedList:插入删除速度比较快,适用于头尾操作插入指定位置3.set:无序的,元素...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 370
精华内容 148
关键字:

java有序集合和无序集合区别

java 订阅