美文网首页
List 一定有序,Set不一定无序

List 一定有序,Set不一定无序

作者: 巧克力er | 来源:发表于2017-11-23 11:20 被阅读0次

作者:巧克力er

坐标:江苏 南京

我们经常听说List是有序且重复的, Set 是无序不重复的。这里有个误区,这里说的顺序有两个概念,一是按添加的顺序排列,二是按自然顺序 a-z 排列。 Set 并不是无序的,传统说的
Set 无序是指 HashSet, 它不能保证元素的添加顺序,更不能保证自然顺序,而 Set 的其他实现类是可以实现这两种顺序的。

先来看看一段测试代码:

public class CollectionTest {
    public static void main(String[] args) {
        List<String> arrayList = new ArrayList<String>();
        arrayList.add("s1");
        arrayList.add("s3");
        arrayList.add("s4");
        arrayList.add("s5");
        arrayList.add("s2");
        System.out.println("ArrayList:==========================");
        for(String arrList : arrayList){
            System.out.println(arrList);
        }
        List<String> linkedList = new LinkedList<String>();
        linkedList.add("s1");
        linkedList.add("s3");
        linkedList.add("s4");
        linkedList.add("s5");
        linkedList.add("s2");
        System.out.println("LinkedList:===========================");
        for(String linkList : linkedList){
            System.out.println(linkList);
        }
        
        Set<String> hashSet = new HashSet<String>();
        hashSet.add("s1");
        hashSet.add("s3");
        hashSet.add("s4");
        hashSet.add("s5");
        hashSet.add("s2");
        System.out.println("HashSet:==============================");
        for(String hashst: hashSet){
            System.out.println(hashst);
        }
        
        Set<String> linkedHashSet = new LinkedHashSet<String>();
        linkedHashSet.add("s1");
        linkedHashSet.add("s3");
        linkedHashSet.add("s4");
        linkedHashSet.add("s5");
        linkedHashSet.add("s2");
        System.out.println("LinkedHashSet:=========================");
        for(String linkedst : linkedHashSet){
            System.out.println(linkedst);
        }
        
        Set<String> treeSet = new TreeSet<String>();
        treeSet.add("s1");
        treeSet.add("s3");
        treeSet.add("s4");
        treeSet.add("s5");
        treeSet.add("s2");
        System.out.println("TreeSet:==============================");
        for(String treest : treeSet){
            System.out.println(treest);
        }
    }

下面输出的结果:

ArrayList:==========================
s1
s3
s4
s5
s2
LinkedList:===========================
s1
s3
s4
s5
s2
HashSet:==============================
s3
s4
s5
s1
s2
LinkedHashSet:=========================
s1
s3
s4
s5
s2
TreeSet:==============================
s1
s2
s3
s4
s5

怎么样看出来了吧,我们通常说的 List 是you序的指的就是最后集合中的元素顺序就是按照添加时候的顺序排列的(无论是实现类 ArrayList, 还是 LinkedList)。但是我们发现 Set 所谓的无序就是在 HashSet 这个实现类中才会出现的这种情况,而 LinkedHashSet 已经和 List 的结果相同了,再看 TreeSet 实现的功能是根据元素的自然顺序排列了。

小伙伴们明白了吗? 以后不要再说 Set 无序了啊! O_O

相关文章

  • redis简单使用

    set List Hashes 无序集合 有序集合

  • Java中集合框架的比较

    List Set Map比较: List:有序,可重复。 Set:无序,不重复。 Map:键值对存储,value可...

  • List 一定有序,Set不一定无序

    作者:巧克力er坐标:江苏 南京 我们经常听说List是有序且重复的, Set 是无序不重复的。这里有个误区,这里...

  • List、Set、Map

    Collection:List :有序 、可重复Set:无序、不可重复Map:有序、不可重复(键值对) Colle...

  • 集合

    --------| Collection 接口,集合的总接口 List 有序 可重复Set 无序 不可重复 --...

  • 集合

    List和Set set集合中不会出现两个equals比较为true的元素 list是有序集,set通常是无序的。...

  • JAVA:Set/List/Map 集合(一)

    Java集合大致可分为:Set,List和Map 三种体系,其中Set代表无序、不可重复的集合;List代表有序、...

  • 集合的继承体系,迭代器

    -java集合可分为set,list,map三种体系,其中set代表无序,不可重复的集合,list代表有序可重复的...

  • Java集合体系总结

    一、Collection(单列集合) List 有序 可重复 Set 无序 不可重复 二、Map(双列集合) ...

  • 集合框架

    集合框架概述: Collection接口无序,不唯一。List接口有序不唯一。Set接口无序唯一。 ArrayLi...

网友评论

      本文标题:List 一定有序,Set不一定无序

      本文链接:https://www.haomeiwen.com/subject/xotzvxtx.html