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

1,LinkedHashset : 保证元素添加的自然顺序

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

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

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;public class Prectice {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("String1");set.add("String4");set.add("String3");set.add("String2");set.add("String5");set.forEach(e-> System.out.print(e+" "));System.out.println();//LinkedHashSet会保证元素的添加顺序Set<String> set2 = new LinkedHashSet<>();set2.add("String1");set2.add("String5");set2.add("String3");set2.add("String4");set2.add("String2");set2.forEach(e-> System.out.print(e+" "));System.out.println();//TreeSet保证元素自然顺序Set<String> set3 = new TreeSet<>();set3.add("String1");set3.add("String5");set3.add("String4");set3.add("String2");set3.add("String3");set3.forEach(e-> System.out.print(e+" "));}}

输出结果:

String5 String4 String3 String2 String1       HashSet元素乱序
String1 String5 String3 String4 String2       LinkedHashSet保证元素添加顺序

String1 String2 String3 String4 String5       TreeSet元素按自然顺序排序

Java中Set真的是无序的吗?相关推荐

  1. java中有序数组比无序数值好_java面向对象的有序数组和无序数组的比较

    packageaa;classArray{//定义一个有序数组 private long[] a;//定义数组长度 private intnElems;//构造函数初始化 public Array(i ...

  2. java linkedlist 查找_Java中LinkedList真的是查找慢增删快

    测试结果 废话不多说,先上测试结果.作者分别在ArrayList和LinkedList的头部.尾部和中间三个位置插入与查找100000个元素所消耗的时间来进行对比测试,下面是测试结果 (感谢@Hosa ...

  3. Java中的List你真的会用吗

    转载自  Java中的List你真的会用吗 List是Java中比较常用的集合类,关于List接口有很多实现类,本文就来简单介绍下其中几个重点的实现ArrayList.LinkedList和Vecto ...

  4. Java中的BigDecimal类你真的了解吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:HikariCP www.jianshu.com/p/c81 ...

  5. java中 d_Java 中的 syncronized 你真的用对了吗

    生活中随处可见并行的例子,并行 顾名思义就是一起进行的意思,同样的程序在某些时候也需要并行来提高效率,在上一篇文章中我们了解了 Java 语言对缓存导致的可见性问题.编译优化导致的顺序性问题的解决方法 ...

  6. Java中线程池,你真的会用吗

    转载自   Java中线程池,你真的会用吗 在<深入源码分析Java线程池的实现原理>这篇文章中,我们介绍过了Java中线程池的常见用法以及基本原理. 在文中有这样一段描述: 可以通过Ex ...

  7. Java 中的 String 真的是不可变的吗

    转载自   Java 中的 String 真的是不可变的吗 我们都知道 Java 中的 String 类的设计是不可变的,来看下 String 类的源码. public final class Str ...

  8. 你真的了解Java中的三目运算符吗

    转载自 你真的了解Java中的三目运算符吗 三目运算符是我们经常在代码中使用的,a= (b==null?0:1);这样一行代码可以代替一个if-else,可以使代码变得清爽易读. 但是,三目运算符也是 ...

  9. [转载] Java内存管理-你真的理解Java中的数据类型吗(十)

    参考链接: Java中的字符串类String 1 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 推荐阅读 第一季 0.Java的线程安全.单例模式.JVM内存结构等知识 ...

最新文章

  1. 如果你只做自己能力范围内的事,那么你永远没法进步
  2. Redhat7修改默认运行级别方法
  3. 测试思想-好东西与大家分享-1
  4. python数据库教程_Python连接mysql数据库及简单增删改查操作示例代码
  5. 升级ASP.Net Core项目
  6. jhipster_JHipster入门,第2部分
  7. php 全局变量能定义数组吗,php数组声明、遍历、数组全局变量使用小结
  8. 鸿蒙眼镜怎么样,Babiators儿童太阳镜怎么样 Babiators儿童太阳镜测评
  9. UVM入坑系列笔记(一)
  10. 密钥怎么存储在数据库中
  11. 51nod-1337:翻转游戏
  12. ios入门之消息推送详解
  13. minecraftjava版光追_《我的世界》加入光追,“马赛克”游戏真有必要这样做?...
  14. mac 中用到的svn命令 持续更新
  15. 支持hicar的华为手机
  16. linux系统刷机教程,在 Linux 刷 BIOS
  17. 9. 面向对象基础(下)
  18. Windows XP Service Pack 3 修复程序列表
  19. PPT之ppt动画的基本设置
  20. SpringBoot多表联查

热门文章

  1. Redis设计与实现之压缩列表
  2. 前端开发:JS中时间戳和时间之间的转换
  3. Android APP适配全面屏手机的技术要点
  4. css文字在div中,[html][css]让文字在div中居中的方法[转]
  5. DetailView ListView
  6. Linux- 初识man、info
  7. 科普:ERP和CRM、MRP、PLM、APS、MES、WMS、SRM的关系
  8. 彻底颠覆护理室:BeautyHealth在欧洲和亚洲推出海菲秀 Syndeo智能数字化物联仪器
  9. cmd中查看python安装路径
  10. python脚本查找txt文本中指定文字及上下文