java - 在 TreeMap 中的特定索引处插入键值对

标签 java collections

我需要将元素放入 Map 中,我选择了 TreeMap 实现,键将按升序排列在 map 中,但其中一个“未分配”的键应始终位于第一个。这可能吗 ? 我当前的代码只对元素进行排序?

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);
    }

}

当前输出为

{apple=34, banana=45, carrot=12, domboi=912, unassigned=?, zucchini=87} 

我想要输出为

{unassigned=?,apple=34, banana=45, carrot=12, domboi=912,zucchini=87}

最佳答案

为此只需更改您的比较器:

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);
    }
}

输出:

TreeMap Entries:
{unassigned=?, apple=34, banana=45, carrot=12, domboi=912, zucchini=87}

关于java - 在 TreeMap 中的特定索引处插入键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37466148/

相关文章:

database - 如何在 Appcelerator 中输出 SUM SQL 查询的结果?

java - 垃圾收集器和匿名类

java - 有关 Java 与 jRuby 互操作的引用信息的最佳来源

java - Eclipse 正在执行错误的 Java 文件

名称中带有连字符的 Java 包

java - 如何插入不使用旋转的 AVL 树?

与集合和泛型相关的 Java 10 迁移问题

java - Collections.newSetFromMap(»ConcurrentHashMap«) 与 Collections.synchronizedSet(»HashSet«)

java - 比较节点与 Collections.sort

java - 在java中调用构造函数