java LinkedHashSet

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]

参考:http://www.monkey1024.com/javase/576

猜你喜欢

转载自blog.csdn.net/sinat_41132860/article/details/84202437