TreeSet
Posted yaobiluo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TreeSet相关的知识,希望对你有一定的参考价值。
TreeSet 保证元素唯一 并且排序
添加对象时 对象必须有排序功能,如果没有,则报classException
能不能存进去,看的就是比较器的比较结果
两种排序方法:
1、 实现comparable接口,重写compareTo()方法
@Override public int compareTo(Person o) /*int num = this.age-o.age; // 年龄是主要条件,name是次要排序 return num == 0 ? this.name.compareTo(o.name) : num;*/ /*int num = this.name.compareTo(o.name); return num == 0 ? this.age - o.age : num ;*/ //按照姓名长度排序 int length = this.name.length() - o.name.length(); return length == 0 ? this.age - o.age: length; ## 先比较首要的 ,再比较次要的
compareTo() 返回0 : 不存
返回正数 : 集合中怎么存怎么取
返回负数 : 倒序存储
二叉树原理 :
每次存的时候 都要比较,小的在左边,大的在右边。
取得时候,先去左边的,即取小的
2、比较器排序
import java.util.List; import java.util.ArrayList; import java.util.Comparator; import java.util.TreeSet; public class test4 // 无序且重复的字符串, 将其排序并且不去除重复 public static void main(String[] args) ArrayList<String> a1 = new ArrayList<>(); a1.add("aaa"); a1.add("aaa"); a1.add("ccc"); a1.add("ddd"); a1.add("aaa"); a1.add("fffffff"); a1.add("aaa"); a1.add("heima"); a1.add("dfasd"); a1.add("aaa"); sort(a1); System.out.println(a1); // 定义方法排序 并保留重复 public static void sort(List<String> list) TreeSet<String> t1 = new TreeSet<>(new liuchong()); // 传入的是比较器 这个地方可以直接传匿名内部类 t1.addAll(list); list.clear(); list.addAll(t1); class liuchong implements Comparator<String> //实现比较器 @Override public int compare(String o1, String o2) int num = o1.compareTo(o2); return num == 0 ? 1 : num ; // 当num == 0时 表示相等,本来就不会存了,但是此时我们返回1,那么就会存了
public class test5 /* *从键盘接收一个字符串,程序对其中所有字符进行排序,例如键盘录入hellitcast 排序 保留重复 */ public static void main(String[] args) paixu(); public static void paixu() Scanner s1 = new Scanner(System.in); System.out.println("请输入一个字符串"); String s2 = s1.nextLine(); char[] c1 = s2.toCharArray(); ArrayList<Character> a1 = new ArrayList<>(); for (char c : c1) a1.add(c); System.out.println(a1); sort(a1); for (Character character : a1) System.out.print(character); public static void sort(ArrayList<Character> list) TreeSet<Character> t1 = new TreeSet<>(new Liu()); t1.addAll(list); list.clear(); list.addAll(t1); class Liu implements Comparator<Character> @Override public int compare(Character ch1, Character ch2) int num = ch1 - ch2; return num == 0 ? 1:num;
import java.util.Comparator; import java.util.Scanner; import java.util.TreeSet; public class test6 /* * 程序启动后 可以从键盘接收多个整数,直到输入quit时结束输入, * 将所有输入的整数倒叙排列打印 */ public static void main(String[] args) Scanner s1 = new Scanner(System.in); TreeSet<Integer> t1 = new TreeSet<>(new Comparator<Integer>() // 匿名内部类, 其实是 Comparator的子类对象 @Override public int compare(Integer i1, Integer i2) int num = i2 - i1 ; // i2 - i1 就是反着排序了 return num == 0 ? 1 : num; ); while (true) String line = s1.nextLine(); if ("quit".equals(line)) break; Integer integer = Integer.parseInt(line); t1.add(integer); for (Integer i : t1) System.out.println(i);
public class test7 /* * 键盘录入5个学生信息(姓名,语,数,外成绩),按照总分从高到低输出控制台 */ public static void main(String[] args) TreeSet<Student> t1 = new TreeSet<>(new ssort()); Scanner s1 = new Scanner(System.in); System.out.println("请输入学生信息,格式是姓名,语,数,外"); while (t1.size() <5) String s2 = s1.nextLine(); String[] c1 = s2.split(","); String name = c1[0]; int yu = Integer.parseInt(c1[1]); int shu = Integer.parseInt(c1[2]); int wai = Integer.parseInt(c1[3]); t1.add(new Student(name,yu,shu,wai)); s1.close(); for (Student student : t1) System.out.println(student); class ssort implements Comparator<Student> @Override public int compare(Student sa, Student sb) int num = sb.getSum() - sa.getSum(); return num == 0 ? 1 :num ;
以上是关于TreeSet的主要内容,如果未能解决你的问题,请参考以下文章