1

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;
}

それは良い効果的な方法ですか?

4

2 に答える 2

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;
}
于 2013-03-23T10:51:14.987 に答える
0

より効率的な解決策があるかもしれませんが、ランタイムについて考えるなら、それは大丈夫なはずです。実際、2つのforループがあり、カウントが大きい方が優勢であり、O(n)になります。ここで、nは大きい方の配列の要素の数です。これは良いランタイムです。

于 2013-03-23T10:46:28.593 に答える