1

当我尝试从 Map 获取值时遇到问题。这是详细信息。

我声明了这个结构:

Map<String, Map<String, IrregularWord>> result4 = new TreeMap<>();

作为键,我使用了 , 等字符串2_5_13_5_121_4_2我填充result4时,我得到了这个结果填充结果4

然后我尝试从中读取所有值result4并用它们制作一些东西:

for (String key : result4.keySet()) {
    Map<String, IrregularWord> words = result4.get(key);
    // other code
}

key == 2_5_1words.size() == 14没有 9 时,它是真实的result4 这是一个错误

更新:此示例的正确值为9.

我的问题是为什么我得到不正确的结果?Map的哈希算法可能有问题?

感谢帮助。

4

1 回答 1

0

我不知道为什么,但我自己的所有问题都Comparator没有在这里写,这是我的错误。

所以,我真的用过

Map<String, Map<String, IrregularWord>> result4 = new TreeMap<>(new LessonsShortPathComparator());

Comparator

public class LessonsShortPathComparator implements Comparator<String> {
    public static String LES_SHORT_PATH_REG_EXP = "[0-9]+_[0-9]+_[0-9]+";
    public int compare(String o1, String o2) {
        String[] o1Str = o1.split("_");
        String[] o2Str = o2.split("_");
        if (Integer.parseInt(o1Str[0]) > Integer.parseInt(o2Str[0]))
            return 1;
        if (Integer.parseInt(o1Str[1]) > Integer.parseInt(o2Str[1]))
            return 1;
        if (Integer.parseInt(o1Str[2]) > Integer.parseInt(o2Str[2]))
            return 1;
        return 0;
        } else
            return o1.compareTo(o2);
    }
}

这是一个问题。我只比较更大的价值,但不包括更少。当我这样修复它时:

public class LessonsShortPathComparator implements Comparator<String> {
    public static String LES_SHORT_PATH_REG_EXP = "[0-9]+_[0-9]+_[0-9]+";
    public int compare(String o1, String o2) {
        if (o1.matches(LES_SHORT_PATH_REG_EXP) && o2.matches(LES_SHORT_PATH_REG_EXP)) {
            String[] o1Str = o1.split("_");
            String[] o2Str = o2.split("_");

            for (int i = 0; i < o1Str.length; i++) {
                int i1 = Integer.parseInt(o1Str[i]);
                int i2 = Integer.parseInt(o2Str[i]);
                if (i1 - i2 != 0) {
                    return i1 - i2;
                }
            }
            return 0;
        } else
            return o1.compareTo(o2);
    }
}

现在一切正常。我不明白为什么?也许IrregularWord在我的Comparator. 首先TreeMap比较键并为值找到正确的位置,反之亦然。

抱歉描述不完整。我真的不知道aComparator会影响到什么。

于 2015-07-29T12:57:52.543 回答