您的位置:首页 > 编程语言 > Java开发

排序容器_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

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());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: