所以,我是java的新手。
我有一个Strings的arraylist ..所以..这个数组看起来像:
[ "foo 123", "bar 124", "foobar 124","foo 125"]
我想要删除foo 123
..
为什么......
因为foo重复两次..我想保留一个具有最大计数的那个(在键旁边)..
我的做法有点令人费解......
使用密钥和计数维护散列映射。如果键存在..检查值,如果值大,则替换条目??
我觉得这是解决这个问题的笨重方法。 有没有一个很好的方法来基本重复删除此列表? 感谢
答案 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());
}