2013-03-23 6 views
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; 
} 

좋은 방법인가요?

+7

는 SQL 데이터베이스가 있다면, 그것은 않을 것 'SELECT ... GROUP BY ... HAVING COUNT (*)> 3'을 쉽게 할 수 있을까요? – NPE

+2

누군가가 "getPrice 메소드가 할 수있는 것이 무엇일까요?"라고 물으면, 정수 목록에서 세 번 이상 반복되는 요소를 찾지 못했을 것입니다. – dasblinkenlight

+0

그것은 안드로이드 프로젝트에서 SQLite 데이터베이스가 될 것입니다. 정수에 관해서는 물론 가격은 정수형이 아니며 단지 테스트 용입니다. –

답변

1

데이터베이스에 liste가있는 경우 SQL을 사용하도록 조언합니다. 당신이 자바에서 그렇게하고 싶은 경우에, 당신이 할 수 있습니다 :

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

"하지만 당신이 정말로 자바에서 그렇게하고 싶다면"나는 데이터베이스 SQLite에서 어떻게 할 지 몰랐다. 나는 그것을하는 더 효율적인 방법을 찾고있다. –

+1

SQL을 사용하여이 작업을 수행하려면 질문에 대한 좋은 해결책이 있습니다. – Pith

0

더 효율적인 솔루션이있을 수 있지만 런타임에 대해 생각한다면 괜찮을 것입니다. 사실 당신은 2 개의 for-loop를 가지며, 더 큰 count의 것이 O (n)을 이끄는 곳에서 지배적입니다. 여기서 n은 더 큰 Array의 원소의 수입니다. 좋은 런타임입니다.

관련 문제