Java -- 排序03(TreeSet 和 TreeMap)
2017-05-14 09:29
369 查看
Java – 排序03(TreeSet 和 TreeMap)
二.TreeMap
一.TreeSet 1.特性:数据元素可以排序,但不可重复 2.对比:与HashSet相比,TreeSet不用重写Hashcode和equals 3.去重:比较等于0即重复 4.排序:与上一章中提到的一样,要么用Comparable,要么用Comparator,代码如下 注:TreeSet是在添加数据的时候排序,修改数据后不改变排序 可以将属性常量化,这样就可以避免修改数据的情况发生 (1)运用Comparator
public class Person { String name; int handsome; public Person(String name, int handsome) { this.name = name; this.handsome = handsome; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("姓名: " + name); sb.append("帅气指数:" + handsome); sb.append("\n"); return sb.toString(); } } public class Test01 { public static void main(String[] args) { Person per1 = new Person("soledad",100000); Person per2 = new Person("刘德华",1000); Person per3 = new Person("梁朝伟",10000); //用Comparator来解决,按帅气指数降序排序 TreeSet<Person> persons = new TreeSet<Person>( new Comparator<Person>(){ @Override public int compare(Person o1, Person o2) { return -(o1.handsome - o2.handsome) ; } } ); persons.add(per1); persons.add(per2); persons.add(per3); System.out.println(persons.toString()); per1.handsome = -100; System.out.println("=============================================="); System.out.println(persons.toString()); } } 打印结果: [姓名: soledad帅气指数:100000 , 姓名: 梁朝伟帅气指数:10000 , 姓名: 刘德华帅气指数:1000 ] ========================================================================= [姓名: soledad帅气指数:-100 , 姓名: 梁朝伟帅气指数:10000 , 姓名: 刘德华帅气指数:1000 ]
(2)运用Comparable
public class Worker implements Comparable<Worker> { String type; double salary; public Worker() { } public Worker(String type, double salary) { this.type = type; this.salary = salary; } @Override public int compareTo(Worker worker) { return -(this.salary > worker.salary ? 1 :(this.salary == worker.salary) ? 0: -1); } @Override public String toString() { return "Worker{" + "type='" + type + '\'' + ", salary=" + salary + '}'; } } public class Test02 { public static void main(String[] args) { //按照工资降序排列 Worker worker = new Worker("程序员",10000); Worker worker2 = new Worker("律师",20000); Worker worker3 = new Worker("会计师",30000); TreeSet<Worker> workers = new TreeSet<Worker>(); workers.add(worker); workers.add(worker2); workers.add(worker3); System.out.println(workers.toString()); } } 打印: [Worker{type='会计师', salary=30000.0}, Worker{type='律师', salary=20000.0}, Worker{type='程序员', salary=10000.0}]
以上结果表明,TreeSet是在添加数据的时候排序,修改数据后不改变排序 不过,可以将属性常量化(final),这样就可以避免修改数据的情况发生
二.TreeMap
1.特性:确保键(key)可以排序,或者提供比较器 (1)确保key可以排序 (2)提供key比较器 比较方法同TreeSet一样,分为Comparator和Comparable
public class TreeMap01 { public static void main(String[] args) { Person per1 = new Person("soledadv",100000); Person per2 = new Person("刘德华",1000); Person per3 = new Person("梁朝伟",10000); //用提供额外的业务类的方法对TreeMap进行比较,按帅气指数降序排列 TreeMap<Person, String> persons = new TreeMap<Person,String>( new Comparator<Person>(){ @Override public int compare(Person o1, Person 4000 o2) { return -(o1.handsome - o2.handsome); } } ); persons.put(per1,"大帅哥"); persons.put(per2,"大帅哥"); persons.put(per3,"大帅哥"); System.out.println(persons.keySet());//查看键的排序 } } public class TreeMap02 { public static void main(String[] args) { //按照工资降序排列 Worker worker = new Worker("程序员",10000); Worker worker2 = new Worker("律师",20000); Worker worker3 = new Worker("会计师",30000); TreeMap<Worker,String> workers = new TreeMap(); workers.put(worker,"钱多话少死得早"); workers.put(worker2,"钱多话少死得早"); workers.put(worker3,"钱多话少死得早"); System.out.println(workers.keySet()); } }
相关文章推荐
- Java容器-引用数据类型排序+TreeSet、TreeMap底层实现
- 浅谈java中的TreeMap 排序与TreeSet 排序
- java treeMap 排序 treeset同理
- Java基础知识强化之集合框架笔记44:Set集合之TreeSet保证元素唯一性和自然排序的原理和图解
- java比较接口Comparable,对象排序存在TreeSet中
- java之TreeMap/TreeSet篇
- java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)
- java TreeMap TreeSet 用法 原理 详解
- Java SortedSet TreeSet按指定方式排序 不同方式排序
- Java基础知识强化之集合框架笔记46:Set集合之TreeSet存储自定义对象并遍历练习2(自然排序)
- 浅谈java中的TreeSet中的排序方式
- Treemap and Treeset java 实现
- Java基础15:treeset;排序方法-比较器;泛型;
- java集合类深入分析之TreeMap/TreeSet篇
- Java SE TreeSet(实现Comparable接口和Comparator匿名类)根据属性排序示例
- TreeSet和TreeMap实现排序
- Java(TreeMap,Set,List)排序
- Java TreeMap/TreeSet
- 【java编程】Collection类之TreeSet按字符串长度排序
- java基础—自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序(java集合六)