我需要将元素放在Map中,然后选择TreeMap实现,键将在地图中按升序排列,但其中一个"未分配"的键应该始终是第一个.这可能吗 ?我当前的代码只将元素放在排序顺序中?
public class TreeMapTest {
public static void main(String args[]){
//the treemap sorts by key
Map<String, String> hm = new TreeMap<String, String>(new StringComparator());
//add key-value pair to TreeMap
hm.put("carrot","12");
hm.put("apple", "34");
hm.put("domboi","912");
hm.put("unassigned","?");
hm.put("banana", "45");
hm.put("zucchini","87");
System.out.println("TreeMap Entries:");
System.out.println(hm);
}
}
class StringComparator implements Comparator<String>{
@Override
public int compare(String str1, String str2) {
return str1.compareTo(str2);
}
}
Run Code Online (Sandbox Code Playgroud)
目前的输出是
{apple=34, banana=45, carrot=12, domboi=912, unassigned=?, zucchini=87}
Run Code Online (Sandbox Code Playgroud)
我希望输出为
{unassigned=?,apple=34, banana=45, carrot=12, domboi=912,zucchini=87}
Run Code Online (Sandbox Code Playgroud)
只需更改您Comparator的内容:
class StringComparator implements Comparator<String> {
@Override
public int compare(String str1, String str2) {
if (str1.equals(str2)) {
return 0;
} else if ("unassigned".equals(str1)) {
return -1;
} else if ("unassigned".equals(str2)) {
return 1;
}
return str1.compareTo(str2);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
TreeMap Entries:
{unassigned=?, apple=34, banana=45, carrot=12, domboi=912, zucchini=87}
Run Code Online (Sandbox Code Playgroud)