TreeSet的使用

下面是TreeSet的方法使用,代码实现如下:

public static void main(String[] args) {

		TreeSet<String> set = new TreeSet<>();

		//添加元素
		set.add("小希");
		set.add("小空");
		set.add("小丽");
		set.add("小光");

		//获取元素个数
		int size = set.size();
		System.out.println("获取元素个数:" + size);//4

		//将newSet1中所有的元素添加到set集合中
		TreeSet<String> newSet1 = new TreeSet<>();
		Collections.addAll(newSet1, "aaa","bbb","ccc","ccc");//利用集合工具类(Collections)批量添加数据
		set.addAll(newSet1);

		//清空集合
		//set.clear();

		System.out.println("判断集合中是否包含某个元素:" + set.contains("李白"));//true
		System.out.println("判断集合中是否包含某个子集合:" + set.containsAll(newSet1));//true

		//true表示没有元素,false表示有元素
		System.out.println("判断集合中是否没有元素:" + set.isEmpty());//false

		//		set.remove("小空");//根据元素删除元素
		//		set.removeAll(newSet1);//去除交集

		//		set.retainAll(newSet1);//保留交集

		//将集合转换为数组
		Object[] array1 = set.toArray();
		System.out.println(Arrays.toString(array1));

		//将集合转换为指定类型的数组
		String[] array2 = new String[set.size()];
		set.toArray(array2);
		System.out.println(Arrays.toString(array2));

		System.out.println("--------------------");

		//遍历集合 -- foreach
		for (String element : set) {
			System.out.println(element);
		}

		System.out.println("--------------------");

		//遍历集合 -- Iterator
		Iterator<String> iterator = set.iterator();
		while(iterator.hasNext()){//判断是否有可迭代的元素
			String next = iterator.next();//获取下一个元素
			System.out.println(next);
		}

TreeSet的特点

特点:自然排序

理解:TreeSet会根据元素的不同类型,去使用不同的排序规则

public static void main(String[] args) {

		//TreeSet存储Integer的元素:数字升序
		TreeSet<Integer> set1 = new TreeSet<>();
		set1.add(4);
		set1.add(2);
		set1.add(1);
		set1.add(5);
		set1.add(3);
		set1.add(3);
		for (Integer element : set1) {
			System.out.println(element);
		}

		System.out.println("------------");

		//TreeSet存储String的元素:字典排序
		TreeSet<String> set2 = new TreeSet<>();
		set2.add("b");
		set2.add("d");
		set2.add("c");
		set2.add("a");
		set2.add("e");
		set2.add("e");
		for (String element : set2) {
			System.out.println(element);
		}

	}

输出:

1
2
3
4
5
------------
a
b
c
d
e

外置比较器 - Comparator、内置比较器 - Comparable

比较器的优先级别:外置比较器 > 内置比较器

外置比较器 - Comparator

理解:利用一个静态内部类,添加条件来判断输出

TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {//利用一个静态内部类,添加条件来判断输出
			//外置比较器的排序规则
			//先比较两个学生是否相同,不相同就按照姓名长度排序,长度相同就按照年龄排序
			@Override
			public int compare(Student o1, Student o2) {
				if(o1.equals(o2)){
					return 0;
				}
				
				int nameLen1 = o1.getName().length();
				int nameLen2 = o2.getName().length();
				if(nameLen1 != nameLen2){
					return nameLen1 - nameLen2;
				}
				
				int age1 = o1.getAge();
				int age2 = o2.getAge();
				if(age1 != age2){
					return age1 - age2;
				}
				return 1;//返回一的时候无论如何都可以存到TreeSet里面去
			}
		});