排序容器_TreeSet与TreeMapJAVA127
2015-11-25 21:10
531 查看
来源:http://www.bjsxt.com/
1、S02E127_01排序容器_TreeSet与TreeMap
(1)TreeSet:数据元素可以排序且不可重复
对比:Set接口子类HashSet,元素必须重写hashcode和equals方法。
去重:不用重写hashcode和equals方法,比较等于0即重复。
实现:两种
——元素实体可以排序:java.lang.Comparable + compareTo
——排序业务类:java.util.Comparator + compare
注意:TreeSet在添加数据时排序,数据更改不会影响原来的顺序。不要修改数据,否则可能重复(加final可使数据不可修改)
(2)TreeMap:确保key可以排序或者提供比较器
——key可以排序
与TreeSet同理
——提供key比较器
与TreeSet同理
1、S02E127_01排序容器_TreeSet与TreeMap
(1)TreeSet:数据元素可以排序且不可重复
对比:Set接口子类HashSet,元素必须重写hashcode和equals方法。
去重:不用重写hashcode和equals方法,比较等于0即重复。
实现:两种
——元素实体可以排序:java.lang.Comparable + compareTo
new TreeSet()时体现
package com.test.sort.collection; import java.util.TreeSet; public class Worker implements Comparable<Worker>{ private String type;//工种 private double salary;//工资 public Worker() { } public Worker(String type, double salary) { super(); this.type = type; this.salary = salary; } public String getType() { return type; } public void setType(String type) { this.type = type; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } @Override public String toString() { return "工种:" + type + ",工资:" + salary + "\n"; } @Override public int compareTo(Worker o) { return (this.salary-o.salary>0) ? 1 : (this.salary==o.salary?0:-1); } public static void main(String[] args) { Worker worker1 = new Worker("垃圾回收员", 12000); Worker worker2 = new Worker("农民工", 10000); Worker worker3 = new Worker("程序猿", 5000); TreeSet<Worker> workers = new TreeSet<Worker>(); workers.add(worker1); workers.add(worker2); workers.add(worker3); System.out.println(workers.toString()); } }
——排序业务类:java.util.Comparator + compare
new TreeSet(Comparator<? super E> comparator)时体现
注意:TreeSet在添加数据时排序,数据更改不会影响原来的顺序。不要修改数据,否则可能重复(加final可使数据不可修改)
package com.test.sort.collection; import java.util.Comparator; import java.util.TreeSet; public class Person { private final String name;//姓名/加final用于不可修改,因为修改可能使用数据重复 private final int handsome;//帅气指数/加final用于不可修改,因为修改可能使用数据重复 public Person() { name = null; handsome = 0; } public Person(String name, int handsome) { super(); this.name = name; this.handsome = handsome; } public String getName() { return name; } public int getHandsome() { return handsome; } @Override public String toString() { return "姓名:" + name + ",帅气指数:" + handsome + "\n"; } public static void main(String[] args) { Person p1 = new Person("你", 100); Person p2 = new Person("刘德华", 1000); Person p3 = new Person("梁朝伟", 1200); Person p4 = new Person("老师", 50); //使用排序的业务类(匿名内部类) TreeSet<Person> persons = new TreeSet<Person>( new Comparator<Person>() { public int compare(Person o1, Person o2) { return o1.getHandsome() - o2.getHandsome(); }; } ); persons.add(p1); //TreeSet在添加数据时排序,不是添加完才排序 persons.add(p2); persons.add(p3); persons.add(p4); System.out.println(persons.toString()); /*属性不加fina前 //数据更改不会影响原来的顺序 p4.setHandsome(100); p4.setName("你"); //p4与p1内容重复,即TreeSet数据存在重复 System.out.println(persons.toString()); */ } }
(2)TreeMap:确保key可以排序或者提供比较器
——key可以排序
public TreeMap()时体现
与TreeSet同理
//使用排序的业务类(匿名内部类) TreeMap<Person2,String> persons = new TreeMap<Person2,String>( new Comparator<Person2>() { public int compare(Person2 o1, Person2 o2) { return o1.getHandsome() - o2.getHandsome(); }; } ); persons.put(p1,"a"); persons.put(p2,"a"); persons.put(p3,"a"); persons.put(p4,"a"); System.out.println(persons.toString());
——提供key比较器
public TreeMap(Comparator<? super K> comparator)时体现
与TreeSet同理
TreeMap<Worker2,String> workers = new TreeMap<Worker2,String>(); workers.put(worker1,"a"); workers.put(worker2,"a"); workers.put(worker3,"a"); System.out.println(workers.toString());
相关文章推荐
- 手写建表sql生成javaBean文件(PostgreSQL版本)
- java关键字final使用方法详解
- Eclipse上GIT插件EGIT使用手册
- ATM存取款程序
- Spring源码阅读——序言
- 类找不到异常 Caused by: java.lang.NoClassDefFoundError
- 高性能Java科学与技术运算库Colt
- 【Java基础】Java异常的一些总结
- 2015年Java代码之04
- 2015年Java代码之03
- Java学习日记9-异常
- 话题12 移位运算符的真实剖析
- SpringMVC框架中的异常解析器-ExceptionHandler和HandlerExceptionResolver(转)
- Java比较器的应用
- eclipse查看jar包中class的中文注释乱码问题的解决
- eclipse常用快捷键
- 用java实现栈,并实现min方法
- 学习Struts2_0200
- Spring MVC框架及标签库
- Java的一些引用方面的问题