List有序可重复,Set无序不重复,这里指的是添加数据的顺序。
但这里说的顺序有两个概念,一是按添加的顺序排列,二是遍历结果按自然顺序a-z排列。Set并不是无序的,传统说的Set无序是指HashSet,它不能保证元素的添加顺序,更不能保证自然顺序,而Set的其他实现类是可以实现这两种顺序的。
保证元素添加的顺序,不保证元素自然的顺序,可重复:List
不保证元素添加的顺序,不保证元素自然的顺序,不可重复:HashSet
保证元素添加的顺序,不可重复:L i n k e d H a s h S e t \color{#FF0000}{LinkedHashSet}LinkedHashSet
保证元素自然的顺序,不可重复:TreeSet
实例:
package com.xhy.xczx.test; import java.util.*; /** * 〈测试类〉 * * @author Barrett * @version 1.0.0 * @time 2020/1/21 */ public class JavaTest1 { public static void main(String[] args) { /** List 保证元素的添加顺序,可以重复 **/ List<String> list = new ArrayList<String>(); list.add("s1"); list.add("s3"); list.add("s5"); list.add("s4"); list.add("s4"); list.add("s2"); list.forEach(e -> System.out.print(e + " ")); System.out.println(); /** HashSet 无序 不能重复**/ Set<String> hashSet = new HashSet<>(); hashSet.add("s1"); hashSet.add("s3"); hashSet.add("s5"); hashSet.add("s4"); hashSet.add("s4"); hashSet.add("s2"); hashSet.forEach(e -> System.out.print(e + " ")); System.out.println(); /** LinkedHashSet 保证元素添加的顺序**/ Set<String> linkedHashSet = new LinkedHashSet<>(); linkedHashSet.add("s1"); linkedHashSet.add("s3"); linkedHashSet.add("s5"); linkedHashSet.add("s4"); linkedHashSet.add("s4"); linkedHashSet.add("s2"); linkedHashSet.forEach(e -> System.out.print(e + " ")); System.out.println(); /** 保证元素自然的顺序:TreeSet **/ Set<String> treeSet = new TreeSet<>(); treeSet.add("s1"); treeSet.add("s3"); treeSet.add("s5"); treeSet.add("s4"); treeSet.add("s4"); treeSet.add("s2"); treeSet.forEach(e -> System.out.print(e + " ")); System.out.println(); } }
结果: