LinkedHashSet底层使用了链表的数据结构
LinkedHashSet的特点是
存取元素的顺序是一致的,并且元素不重复。
LinkedHashSet的继承图
LinkedHashSet中没有特殊的方法,都是将继承的类和实现的接口中的方法重写
示例:
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetTest {
public static void main(String[] args) {
Set<String> set1 = new LinkedHashSet<>();
set1.add("java");
set1.add("python");
set1.add("php");
set1.add("c/c++");
set1.add("java");
System.out.println(set1);// [java, python, php, c/c++] 跟存入的顺序一致
Set<Integer> set2 = new LinkedHashSet<>();
set2.add(1);
set2.add(4);
set2.add(2);
set2.add(1);
System.out.println(set2);//[1,4,2]跟存入的顺序一直
}
}
out:
[java, python, php, c/c++]
[1,4,2]
练习:
1.生成10个1~20之间的整数,并且这些整数不能重复
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
//生成10个1~20之间的整数,并且这些整数不能重复
public class LinkedHashSetTest02 {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();// HashSet和LinkedHashSet都可以
Random r = new Random();
//while判断条件set.size()!=10和set.size()<10这两个都可以
while (set.size() < 10) {
//nextInt(int bound)生成的随机数在[0,bound),所以要加1
int i = r.nextInt(20) + 1;
set.add(i);
}
System.out.print(set);
}
}
out:
[17, 18, 2, 5, 6, 7, 8, 9, 13, 14]
2.将List中的元素进行去重
隐含着元素顺序不能变,所以用LinkedHashSet
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
//将List中的元素去重
public class LinkedHashSetTest03 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("f");
list.add("b");
list.add("b");
list.add("c");
list.add("f");
System.out.println(list);//[f, b, b, c, f]
//创建LinkedHashSet对象
Set<String> set = new LinkedHashSet<>();
//将List元素添加到LinkedHashSet中,会自动把重复元素去掉,且存取的顺序不变
set.addAll(list);
//将原来的List清空
list.clear();
//将set中的元素放入List中
list.addAll(set);
System.out.println(list);//[f, b, c]
}
}
out:
[f, b, b, c, f]
[f, b, c]