Java TreeSet和TreeMap

TreeSet

元素不可以重复,元素可以排序,添加数据时自动进行排序,TreeSet存储数据尽量不要修改

实例代码(用到了匿名内部类):

案例一(Comparator):

实体类:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
  
public class Person {
       private final String name;//名称
       private final int handsome;//帅气指数
       
       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 "姓名:"+this.name+",帅气指数:"+this.handsome+"\n";
       }
       
       
  
}

测试:

import java.util.TreeSet;
/**
 * 提供了 解耦的方式:业务排序类
 * @author Administrator
 *
 */
public class TreeSetDemo {
  
       /**
        * @param args
        */
       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容器中,使用排序的业务类(匿名内部类)
              TreeSet<Person> persons =new TreeSet<Person>(
                                   new java.util.Comparator<Person>(){
  
                                          @Override
                                          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);
              
              /*
              //改变数据
              p4.setHandsome(100);
              p4.setName("您");
              */ 
              //p4 与p1 内容重复 
              System.out.println(persons);
              
       }
  
}

 

案例二(Comparable):

实体类:

public class Worker implements java.lang.Comparable<Worker> {
       //工种
       private String type;
       //工资
       private double salary;
       public Worker() {
              // TODO Auto-generated constructor stub
       }
       
       
       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) {
              return this.salary>o.salary?1:( this.salary==o.salary?0:-1);
       }
       
       @Override
       public String toString() {
              return "工种:"+this.type+",工资:"+this.salary+"\n";
       }
       
}

测试:

import java.util.TreeSet;
/**
 * 实体类实现Comparable 接口的应用
 * @author Administrator
 *
 */
public class TreeSetDemo2 {
  
       /**
        * @param args
        */
       public static void main(String[] args) {
              Worker w1 =new Worker("垃圾回收员",12000);
              Worker w2 =new Worker("农民工",8000);
              Worker w3 =new Worker("程序猿",5000);
              
              TreeSet<Worker> employees =new TreeSet<Worker>();
              employees.add(w1);
              employees.add(w2);
              employees.add(w3);
              System.out.println(employees);
              
       }
  
}

 

 

TreeMap

要求键可以排序,与上TreeSet同理。

import java.util.Set;
import java.util.TreeMap;
  
public class TreeMapDemo {
  
       /**
        * @param args
        */
       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);
              
              TreeMap<Person,String> map =new TreeMap<Person,String>(new java.util.Comparator<Person>(){
  
                     @Override
                     public int compare(Person o1, Person o2) {
                            return -(o1.getHandsome()-o2.getHandsome());
                     }
                     
              } );
              map.put(p1, "bjsxt");
              map.put(p2, "bjsxt");
              map.put(p3, "bjsxt");
              map.put(p4, "bjsxt");
              
              //查看键
              Set<Person> persons =map.keySet();
              System.out.println(persons);
       }
  
}
  
  
  
import java.util.TreeSet;
/**
 * 实体类实现Comparable 接口的应用
 * @author Administrator
 *
 */
public class TreeSetDemo2 {
  
       /**
        * @param args
        */
       public static void main(String[] args) {
              Worker w1 =new Worker("垃圾回收员",12000);
              Worker w2 =new Worker("农民工",8000);
              Worker w3 =new Worker("程序猿",5000);
              
              TreeSet<Worker> employees =new TreeSet<Worker>();
              employees.add(w1);
              employees.add(w2);
              employees.add(w3);
              System.out.println(employees);
              
       }
  
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值