排序容器
TreeSet
1.特点:数据元素可以排序且不可重复
之前学过set接口的另外一个实现类HashSet:元素必须重写hascode和equals方法
TreeSet元素的比较
1.元素可以排序 实现java.lang.Comparable+重写compareTo
new TreeSet()
2.排序业务类 实现java.lang.Comparator+重写compare
new TreeSet(Comparator<? super E> comparator)
注意:在添加数据时候,数据更改不会影响原来顺序。不要修改数据,否则可能重复
实例一:与上文的实例2类似
TreeSetDemo.java
package sort;
import java.util.TreeSet;
//127 TreeSet 提供了解耦方式:业务排序类
public class TreeSetDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1=new Person("刘德华",300);
Person p2=new Person("梁朝伟",400);
Person p3=new Person("周杰伦",100);
//使用排序的业务类(匿名内部类)
TreeSet<Person> persons=new TreeSet<Person>(
new java.util.Comparator<Person>(){
@Override
public int compare(Person o1, Person o2) {
// TODO Auto-generated method stub
return o1.getHandsome()-o2.getHandsome();
}
}
);
persons.add(p1);//TreeSet在添加数据时排序
persons.add(p2);
persons.add(p3);
System.out.println(persons);
}
}
Person.java
package sort;
//127 TreeSet
public class Person {
private String name;
private int handsome;
public Person(){}
public Person(String name, int handsome) {
super();
this.name = name;
this.handsome = handsome;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHandsome() {
return handsome;
}
public void setHandsome(int handsome) {
this.handsome = handsome;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "姓名:"+this.name+"帅气指数:"+this.handsome+"\n";
}
}
实例二:
package sort;
//127 实现了Comparable接口的应用
import java.util.TreeSet;
public class TreeSetDemo2 {
public static void main(String[] args) {
Worker w1=new Worker("清洁工",12000.0);
Worker w2=new Worker("程序员",1000.0);
Worker w3=new Worker("营销员",16000.0);
TreeSet<Worker> employees=new TreeSet<Worker>();
employees.add(w1);
employees.add(w2);
employees.add(w3);
System.out.println(employees);
}
}
package sort;
//127 TreeSet
public class Worker implements java.lang.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 int compareTo(Worker o) {
// TODO Auto-generated method stub
return this.salary>o.salary?1:(this.salary>o.salary?0:-1);
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "职业:"+this.type+"\t"+"工资:"+this.salary+"\n";
}
}
TreeMap 确保key可以排序或者提供比较器
实例一:
package sort;
import java.util.Set;
import java.util.TreeMap;
public class TreeMapDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1=new Person("刘德华",300);
Person p2=new Person("梁朝伟",400);
Person p3=new Person("周杰伦",100);
//使用排序的业务类(匿名内部类)
TreeMap<Person,String> persons=new TreeMap<Person,String>(
new java.util.Comparator<Person>(){
@Override
public int compare(Person o1, Person o2) {
// TODO Auto-generated method stub
return o1.getHandsome()-o2.getHandsome();
}
}
);
//一下为与TrreMap不同的操作
persons.put(p1, "lzk");
persons.put(p2, "lzk");
persons.put(p3, "lzk");
Set<Person> set=persons.keySet();
System.out.println(set);
}
}
实例二:
package sort;
//127
import java.util.TreeMap;
public class TreeMapDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Worker w1=new Worker("清洁工",12000.0);
Worker w2=new Worker("程序员",1000.0);
Worker w3=new Worker("营销员",16000.0);
TreeMap<Worker,String> employees=new TreeMap<Worker,String>();
employees.put(w1,"lzk");
employees.put(w2,"lzk");
employees.put(w3,"lzk");
System.out.println(employees.keySet());
}
}
** Collections工具类**
package sort;
//128 Collections工具类
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CollectionsDemo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> cards =new ArrayList<Integer>();
List<Integer> p1=new ArrayList<Integer>();
List<Integer> p2=new ArrayList<Integer>();
List<Integer> p3=new ArrayList<Integer>();
List<Integer> last=new ArrayList<Integer>();
//shuffle洗牌
for(int i=0;i<54;i++){
cards.add(i);
}
Collections.shuffle(cards);
for(int i=0;i<51;i+=3){
p1.add(cards.get(i));
p2.add(cards.get(i+1));
p3.add(cards.get(i+2));
}
for(int i=51;i<54;i++){
last.add(cards.get(i));
}
System.out.println("第1人:"+p1);
System.out.println("第2人:"+p2);
System.out.println("第3人:"+p3);
System.out.println("底牌为:"+last);
}
//测试reverse方法
public static void test01(){
List<Integer> list =new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
System.out.println(list);
Collections.reverse(list);
System.out.println(list);
}
}