在java中查找和替换重复项

时间:2013-11-21 01:48:11

标签: java

所以,我是java的新手。

我有一个Strings的arraylist ..所以..这个数组看起来像:

[ "foo 123", "bar 124", "foobar 124","foo 125"]

我想要删除foo 123 ..

为什么......

因为foo重复两次..我想保留一个具有最大计数的那个(在键旁边)..

我的做法有点令人费解......

使用密钥和计数维护散列映射。如果键存在..检查值,如果值大,则替换条目??

我觉得这是解决这个问题的笨重方法。 有没有一个很好的方法来基本重复删除此列表? 感谢

1 个答案:

答案 0 :(得分:1)

你的方法非常简单 - 事实上,它是渐近最快的,因为它在时间和空间都是O(N)

实施也非常简单。使用LinkedHashMap保留密钥的插入顺序。

String[] data = new String[] {"foo 123", "bar 124", "foobar 124","foo 125"};
Map<String,Integer> counts = new LinkedHashMap<String,Integer>();
for (String s : data) {
    String[] tok = s.split(" ");
    Integer count = Integer.valueOf(tok[1]);
    if (!counts.containsKey(tok[0]) || counts.get(tok[0]) < count) {
        counts.put(tok[0], count);
    }
}
for (Map.Entry<String,Integer> e : counts.entrySet()) {
    System.out.println(e.getKey() + " " +e.getValue());
}

Demo on ideone