如果new 一个TreeMap key为string 。TreeMap自动排序有存入。若放入的key是非String对象,设置comparator对其进行排序。
可在comparator中设置排序逻辑
测试代码:
HashMap<A,String> sm = new HashMap<A,String>();
A a3 = new A("1111","a3");A a4 = new A("aaa","a4");
A a1 = new A("2221","a1");
A a2 = new A("dstg312","a2");
sm.put(a3,"1");
sm.put(a4,"1");
sm.put(a1,"1");
sm.put(a2,"1");//初始化map
Comparator<A> cc = new TestComparator();//创建Comparator
SortedMap sm1 = new TreeMap(cc);//设置Comparator
sm1.putAll(sm);//设置要排序的map
Set<Entry<A,String>> en = sm1.entrySet();//读取数据
Iterator<Entry<A,String>> it = en.iterator();
while(it.hasNext()){
Entry<A,String> ee = it.next();
System.out.println("before sort:"+ee.getKey().toString()+"--"+ee.getValue());
}
测试实体类A:
public class A {
private String a;
private String b;
public A(String a, String b) {
super();
this.a = a;
this.b = b;
}
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
@Override
public String toString() {
return "a:"+a+"---b:"+b;
}
}
TestComparator类:
public class TestComparator implements Comparator<A> {
public int compareString(String a,String b){
char[] aa = a.toCharArray();
char[] bb = b.toCharArray();
for(int i=0;i<(aa.length>bb.length?aa.length:bb.length);i++) //比较char
{
if(aa[i]>bb[i]){
return 1;
}
if(aa[i]<bb[i]){
return -1;
}
}
return 0;
}