首页 > 编程语言 > 详细

Java中Set真的是无序的吗?

时间:2021-06-02 15:16:29      阅读:14      评论:0      收藏:0      [点我收藏+]

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

2,TreeSet : 保证元素的自然顺序

 通过下面一段代码来理解上述问题:

package com.zk.test.collection;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;

public class set {
    public static void main(String[] args) {
        /**
         * Tree保证元素按照自然顺序a-z排列
         */
        Set set=new TreeSet<String>();
        set.add("aa");
        set.add("b2");
        set.add("cc3");
        set.add("d4");
        set.add("a");
        System.out.println("TreeSet---"+set);

        /**
         * HashSet无序
         */
        Set hashSet=new HashSet();
        hashSet.add("aa");
        hashSet.add("b2");
        hashSet.add("cc3");
        hashSet.add("d4");
        hashSet.add("a");
        System.out.println("HashSet---"+hashSet);


        //LinkedHashSet会保证元素的添加顺序
        Set<String> linkedHashSet = new LinkedHashSet<>();
        linkedHashSet.add("a");
        linkedHashSet.add("c");
        linkedHashSet.add("b");
        linkedHashSet.add("e");
        linkedHashSet.add("d");
        //linkedHashSet.forEach(e-> System.out.print(e+" "));
        System.out.println("LinkedHashSet---"+linkedHashSet);
    }

}

输出结果:

TreeSet---[a, aa, b2, cc3, d4]          TreeSet元素按自然顺序排序
HashSet---[aa, b2, d4, a, cc3]         HashSet元素乱序
LinkedHashSet---[a, c, b, e, d]        LinkedHashSet保证元素添加顺序

 

Java中Set真的是无序的吗?

原文:https://www.cnblogs.com/wffzk/p/14840781.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!