我们经常听说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保证元素添加顺序
原文:https://www.cnblogs.com/wffzk/p/14840781.html