Comparable 和 Comparator 区别以及应用,TreeSet和 List的 自动排序

来源:互联网 发布:淘宝托管骗术 编辑:程序博客网 时间:2024/04/25 01:49

实例Person01.class

package test01_集合添加的时候自动排序;import java.util.Comparator;/** * @version 1.0 * * @author DongXiang *  * @action  * <br> <a> Comparator 不支持集合的排序功能 ,支持比较:compare(lso,rso); * <br> <a> Comparable 支持集合的排序功能 :compareTo( o ); *  * <br> <a>针对于List 集合:1. 实现了Comparable接口的类的对象的方法, * <br> <a>  2. Collections.sort或Arrays.sort进行自动排序。 * <br> <a>针对于Set(TreeSet) 集合:1. 实现了Comparable接口的类的对象的方法, * <br> <a>       2. 重写equals 和 hashCode方法,再往集合中添加元素的时候,自动排序了; *  * @time 2017年1月9日下午3:25:47 *  */public class Person01 implements Comparable<Person01>,Comparator<Person01>{private String name;private Integer age;private Integer id;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Person01() {super();}public Person01(String name, Integer age, Integer id) {super();this.name = name;this.age = age;this.id = id;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", id=" + id + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((age == null) ? 0 : age.hashCode());result = prime * result + ((id == null) ? 0 : id.hashCode());result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Person01 other = (Person01) obj;if (age == null) {if (other.age != null)return false;} else if (!age.equals(other.age))return false;if (id == null) {if (other.id != null)return false;} else if (!id.equals(other.id))return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}@Overridepublic int compareTo(Person01 o) {int tempAge=this.getAge().compareTo(o.getAge());int tempID=this.getId().compareTo(o.getId());return tempID==0?(tempAge==0?0:tempAge):tempID;}@Overridepublic int compare(Person01 o1, Person01 o2) {int tempAge=o1.getAge().compareTo( o2.getAge());int tempID=o1.getId().compareTo( o2.getId());return tempID==0?(tempAge==0?0:tempAge):tempID;}}

应用Test01.class

package test01_集合添加的时候自动排序;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import java.util.TreeSet;public class Test01 {public static void main(String[] args) {List<Person01> pList=new ArrayList<>();Set<Person01> pSet=new TreeSet<>();Map<String, Person01> pMap=new HashMap<>();Person01 person03=new Person01("p3", 13, 20);Person01 person01=new Person01("p1", 11, 21);Person01 person02=new Person01("p2", 12, 22);Person01 person07=new Person01("p7", 10, 20);Person01 person04=new Person01("p3", 13, 20);Person01 person06=new Person01("p6", 10, 25);Person01 person05=new Person01("p5", 15, 20);pList.add(person03);pList.add(person01);pList.add(person02);pList.add(person07);pList.add(person04);pList.add(person06);pList.add(person05);pSet.add(person03);pSet.add(person01);pSet.add(person02);pSet.add(person07);pSet.add(person04);pSet.add(person06);pSet.add(person05);pMap.put("person03", person03);pMap.put("person01", person01);pMap.put("person02", person02);pMap.put("person07", person07);pMap.put("person04", person04);pMap.put("person06", person06);pMap.put("person05", person05);System.out.println("################  pList 遍历    ##########");Collections.sort(pList);//调用这个方法的时候,按照集合重写的comparable的方法,自动按照排序规则;进行排序。for (Iterator iterator = pList.iterator(); iterator.hasNext();) {Person01 person012 = (Person01) iterator.next();System.out.println(person012.toString());}System.out.println("################  pSet 遍历    ##########");//重写equals 和   hashCode,和Implements  Comparable自动按照排序规则;进行排序。for (Iterator iterator = pSet.iterator(); iterator.hasNext();) {Person01 person012 = (Person01) iterator.next();System.out.println(person012.toString());}System.out.println("################  pMap 遍历    ##########");//Set keySet=pMap.keySet();//for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {//String key =  (String) iterator.next();//System.out.println("key = "+key+";keyValue = "+pMap.get(key));//}//  System.out.println("通过Map.values()遍历所有的value,但不能遍历key");//  for (Person01 v : pMap.values()) {//   System.out.println("value= " + v);//  } for (Map.Entry<String, Person01> entry : pMap.entrySet()) {  System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); }}}



1 0
原创粉丝点击