List是有序且重复的,Set是无序不重复的。这里说的顺序有两个概念,一是按添加的顺序排列,二是按自然顺序a-z排列。Set并不是无序的,传统说的Set无序是指HashSet,它不能保证元素的添加顺序,更不能保证自然顺序,而Set的其他实现类是可以实现这两种顺序的。
保证元素添加的顺序,不保证元素自然的顺序,可重复:List
不保证元素添加的顺序,不保证元素自然的顺序,不可重复:HashSet
保证元素添加的顺序,不可重复:LinkedHashSet
保证元素自然的顺序,不可重复:TreeSet
实例:
package com.study.set;
import java.util.*;
/**
* List是有序且重复的,保证元素的添加顺序,不能保证元素的自然顺序
*
* Set是无序不重复的:Set无序是指HashSet,它不能保证元素的添加顺序,更不能保证自然顺序
* 保证元素添加的顺序:LinkedHashSet
* 保证元素自然的顺序:TreeSet
*/
public class SetTest {
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("s1");
hashSet.add("s5");
hashSet.add("s3");
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("s5");
linkedHashSet.add("s3");
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("s5");
treeSet.add("s3");
treeSet.add("s4");
treeSet.add("s2");
treeSet.forEach(e ->System.out.print(e+" "));
System.out.println();
}
}
结果: