2017-12-02 10 views
-2

(String, Object)를 사용하여 해시 테이블을 만들었습니다. 모든 객체를 키 문자열의 길이로 분리하고 동일한 길이의 문자열 배열을 만들어야합니다. 누군가가 나를 인도 할 수 있을까요? 지금까지 내 코드 :해시 테이블에서 지정된 값을 가진 객체 가져 오기 Java

Set<String> keys = words.keySet(); 
ArrayList<ArrayList<Word>> outer = new ArrayList<ArrayList<Word>>(); 
ArrayList<Word> inner = new ArrayList<Word>(); 

for(String key: keys) { 
    for (int i=0; i< 15; i++) { 
     if (key.length() == i) { 
      inner.add(words.get(key)); 
     } 
     outer.add(i, inner); 
    } 
} 
+0

이 있습니까? 이 문제에 대해 아직 연구를 했습니까? –

+0

내부에 여러 개의 배열이있는 배열이 하나 있습니다. – Dany

+0

그럼 정확히 무슨 질문입니까? – Mureinik

답변

0

특정 크기의 많은 단어가 없을 수 있기 때문에 당신이 불필요하게 될 각각의 길이 i에 대한 모든 단어의 길이를 확인하는 것입니다, 그래서 당신이 반복하고있는 방법은 비효율적이다. 한 번 단어 목록을 살펴보고지도를 사용하여 길이를 나타내는 키와 단어를 연결 한 다음 끝에 목록을 대조 할 수 있습니다.

이 시도 : 최종 출력에 얼마나 많은 실제 배열

Map<Integer, List<String>> sizeMap = new HashMap<>(); 

for (String key: keys) { 
    int length = key.length(); 
    if (sizeMap.containsKey(length)) { 
     // If we already have a list initialized, add the word 
     List<String> mWords = sizeMap.get(length); 
     mWords.add(key); 
    } else { 
     // Otherwise, add an empty list so later we don't try appending to null 
     sizeMap.put(length, new ArrayList<>()); 
    } 
} 

// Convert the map to a list of lists 
for (List<String> sizeGrouping : sizeMap.values()) { 
    outer.add(sizeGrouping); 
}