在特定索引的树形图中插入键值对

Pra*_*eth 5 java collections

我需要将元素放在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)

Nic*_*tto 6

只需更改您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)