我需要从数据库中获取重复次数超过3次的元素。这是我的代码如何执行此操作:
public static ArrayList<Integer> getPrice(List<Integer> list) {
ArrayList<Integer> result = new ArrayList<Integer>();
int val;
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < list.size(); i++) {
val = list.get(i);
if (!map.containsKey(val)) {
map.put(val, 1);
} else {
map.put(val, map.get(val) + 1);
}
}
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if (entry.getValue() > 3) {
result.add(entry.getKey());
}
}
return result;
}
这是好的有效方式吗?
答案 0 :(得分:1)
如果你在数据库中获得列表,我会建议你使用SQL。但是如果你想在java中这样做,你可以这样做:
public static List<Integer> getPrice(List<Integer> list) {
SetUniqueList<Integer> result = new SetUniqueList<Integer>();
for (Integer number : list) {
int occurrences = Collections.frequency(list, number);
if (occurrences > 3) {
result.add(number);
}
}
return result;
}
或者没有org.apache.commons.collections.list:
public static List<Integer> getPrice(List<Integer> list) {
Set<Integer> aSet = new HashSet<Integer>();
for (Integer number : list) {
if (Collections.frequency(list, number) > 3) {
aSet.add(number);
}
}
List<Integer> result = new ArrayList<Integer>();
result.addAll(aSet);
return result;
}
答案 1 :(得分:0)
可以有更有效的解决方案,但如果你考虑运行时它应该没问题。实际上,你有2个for循环,其中具有较大计数的那个占主导地位,这导致O(n),其中n是较大数组的元素的数量。 这是一个很好的运行时。