2011-11-02 50 views
0

我需要獲取對象的arrayList中最頻繁出現的元素的計數。我有這個代碼,它的工作。ArrayList中的重複元素(java)

public static int contarRepeditos(ArrayList<Objecto> a) { 
    int resul = 0; 
    ArrayList<Integer> valores = new ArrayList<Integer>(); 
    for (int i = 0; i < a.size(); i++) { 
     valores.add(a.get(i).getValor()); 
    } 
    ArrayList<Integer> resultados = new ArrayList<Integer>(); 
    for (int i = 0; i < valores.size(); i++) { 
     resultados.add(Collections.frequency(valores, a.get(i).getValor())); 
    } 
    resul = Collections.max(resultados); 
    return resul; 
} 

我需要知道是否有最佳方法來做到這一點。謝謝。

+2

您的代碼不符合您的描述。這聽起來像你需要得到最頻繁發生的'valor'值 - 這是這種情況嗎? –

+0

是的,對不起,我很難用英語表達這一點。是最頻繁的。例如具有(0)(0)(0)(1)(1)的5個對象。你得到3. – ramons03

回答

5

典型的方法是使用一個地圖,其中的關鍵將是「勇氣」值,並且該值將是該值已出現多少次的運行計數。

+0

謝謝戴夫,我會嘗試。 – ramons03

0

示例使用地圖:

public static int contarRepeditos(List<Objecto> a) { 
    Map<Integer, Integer> freqMap = new HashMap<Integer, Integer>(); 
    for (Objecto obj : a) { 
     freqMap.put(obj.getValor(), (freqMap.get(obj.getValor()) == null ? 1 : (freqMap.get(obj.getValor()) + 1))); 
    } 
    return Collections.max(freqMap.values()); 
} 
+0

謝謝Bhesh。這看起來好多了。 – ramons03