【问题标题】:Java - Select the Second value in hashmapJava - 选择哈希图中的第二个值
【发布时间】:2015-08-26 08:55:16
【问题描述】:

这是我的哈希图:

            if (m1.get(image.getRGB(x, y)) == null) {
            m1.put(image.getRGB(x, y), 1);

        } else {
            int newValue = Integer.valueOf(String.valueOf(m1.get(image.getRGB(x, y))));
            newValue++;
            m1.put(image.getRGB(x, y), newValue);

        }

然后我这样打印:

for (Object key : m1.keySet()) {
        Color temp = new Color((int) key);
        int r = temp.getRed();
        int g = temp.getGreen();
        int b = temp.getBlue();
        System.out.println("r: " + r + " G: " + g + " B: " + b+ "\t\tValue: " + m1.get(key));

    }

如何选择我的 hashmap 的第二个值(hashmap 中的第二个最大值)将其值保存在另一个变量中?

【问题讨论】:

标签: java image hashmap


【解决方案1】:

您可以使用以下值创建一个列表:

List<Integer> valuesList = new ArrayList<Integer>(m1.values());

然后排序:

Collections.sort(valuesList, Collections.reverseOrder());

最后得到第二项:

int secondMax = valuesList.get(1);

【讨论】:

  • 我想保留 image.rgb 及其价值。这会有帮助吗?
  • @Hamid 否。您无法获得给定值的键。我建议您在 hashmap 上进行迭代,并在迭代键时比较值。
  • @MarounMaroun 此解决方案仍不会提供为其返回此值的键。那么您不认为使用树图会是更好的方法吗?
  • @SacJn 当然可以使用。但我认为迭代现有的 Hash Map 也应该可以解决这个问题..
【解决方案2】:

如果可以更改,则将实现类型更改为TreeMap。在对它们进行迭代时,它们将按排序顺序显示数据。

您只需要定义一个比较器,您将在其中定义更高和更低的含义。

在创建树图实例时,传递这个比较器

【讨论】:

  • 我不关心类型。我只想在该图像中保存一个 image.rgb 及其值。哪种类型更好,它让我可以选择我想要的第 n 个值?
  • 你之前没有提到你想要第二高。
  • @Hamid Map&lt; TYPE 1, TYPE2 &gt; map = new TreeMap &lt; TYPE1, TYPE2 &gt; (new Comparator () )。你只需要为它声明一个比较器
猜你喜欢
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 2016-05-26
相关资源
最近更新 更多