Java中Set真的是无序的吗?
我们经常听说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元素按自然顺序排序
下一篇:
PopWindow实现显示背景窗口变暗