对于Set、Map若要容器内有序,那么就不能用hashset与hashmap了,需要用Treeset与Treemap,排序内部实现不是像数组与list容器一样加入元素后调用Collections.sort排序,Set、Map排序是“插入排序”,即边put边排序。当然了,如果是常规数据类型,则不必加入比较器即Map<person,String> treemap=new TreeMap<person,String>();
下面分别使用hashset与hashmap对几个人进行排序
1.实体类(对其进行排序)
package Compare_package;
public class person {
private String name;
private int id;
public person(String name, int id) {
super();
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "姓名:"+this.name+" 编号为:"+this.id+"\n";
}
}
2.比较器定义
package Compare_package;
import java.util.Comparator;
public class my_com implements Comparator<person> {
@Override
public int compare(person o1, person o2) {
// TODO Auto-generated method stub
return o1.getId()-o2.getId();
}
}
3.排序
package Compare_package;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import Comparactor.Goods;
import Comparactor.my_compare;
import Comparactor.my_compare2;
public class test_1 {
public static void main(String[] args) {
//人实体
person p1=(new person("大舅",23));
person p2=(new person("小玖",233));
person p3=(new person("合同法国",27));
person p4=(new person("百润发",29));
//Set排序
Set<person> treeset=new TreeSet<person>(new my_com());
treeset.add(p1);
treeset.add(p2);
treeset.add(p3);
treeset.add(p4);
System.out.println("====================TreeMap==========================");
System.out.println(treeset);
//map排序
Map<person,String> treemap=new TreeMap<person,String>(new my_com());
treemap.put(p1, "4356");
treemap.put(p2, "4356");
treemap.put(p3, "4356");
treemap.put(p4, "4356");
System.out.println("====================TreeMap==========================");
System.out.println(treemap.keySet());
}
}