2013-10-13 3 views
-1

문제가 있습니다. 사실 나는 일부 코드에서 일하고 그 코드는 파이썬으로 작성된지만 자바에서 동일한 문제를 싶습니다. 나는 모든 것을 가지고 있지만 컬렉션에 어떤 문제가오고있다.사전에 값을 java의 값에 따라 감소 순서로 저장 하시겠습니까?

나 자바 딕셔너리에 값을 저장하고있다 :

Dictionary<String, Integer> dc=new Hashtable<String, Integer>(); 
    String s[]={"red", "blue", "red", "green", "blue", "blue"}; 
    for(String t: s){ 

     if(dc.get(t)==null) 

      dc.put(t, 1); 
    else 
      dc.put(t, dc.get(t)+1); 
} 

출력 :

{blue=3, green=1, red=2} 

내가 좋아 원한다

{blue=3, red=2, green=1} 

을하지만 내가 원하는 출력되지 나는 파이썬처럼주고 싶다 :

cnt = Counter() 
>>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']: 
...  cnt[word] += 1 
>>> cnt 
Counter({'blue': 3, 'red': 2, 'green': 1}) 

어느 것이 나에게 어떤 생각을 줄 수 있습니까?

+0

사전이 순서를 유지한다고 생각하지 않습니다. – thefourtheye

+0

SortedList 또는 SortedDictionary 일 수 있습니다. 그러나리스트 나 배열이 이것을 할 것입니다. 원하는 순서로 채우면됩니다. –

답변

2

HashTable을 사용하지 마십시오.이 컬렉션은 폐기 된 컬렉션 중 하나입니다.

유지 관리하고자하는 주문에 대해서는 확실하지 않지만 많은 다른 Map 유형이 있습니다. HashTableHashMap과 동일하지만 syncronized 인 것은 약간 유용하지 않습니다.

final Map<String, Integer> m = new HashMap<>()

이것은 HashTable처럼 반복의 순서에 대한 전혀 보장 제공하는 HashMap를 생성합니다 :

는 옵션을 갈 수 있습니다.

final Map<String, Integer> m = new LinkedHashMap<>()

LinkedHashMap는 요소의 반복 순서는 신청서되도록 그 요소의 이중 연결리스트를 유지한다는 사실을 제외 HashMap 비슷

.

TreeMap

final Map<String, Integer> m = new TreeMap<>()

두 해시 기반지도에 매우 다른 짐승이다. TreeMapTreeO(1) 검색을 제공하고 O(lg n) 검색을 제공하므로 더 느립니다. 그러나 TreeMap은 모든 요소를 ​​으로 항상 정렬하여 유지합니다.. 기본 생성자는 자연 순서에 따라 요소를 정렬하므로 요소는 implements Comparable이어야하고 TreeMap은 요소를 정렬하는 데 사용해야합니다.

는 '원 난 당신이 Java Collections API에 대해 읽어 제안했다 1998 년 자바 1.2의 릴리스에 의해 대체 된 둘의 DictionaryHashTable을 사용하려고, 구체적으로는 약 Maps하지만 훨씬을 읽고있는 점을 감안 아프다.

+0

나는'collection api'에 대해서 알고 있었지만이 명령을 어떻게 수행하는지 알고있었습니다. –

관련 문제