내가 선택한 데이터 구조 설계는 실행하기가 매우 어렵다는 것을 증명하고 있으므로,이를 실행하는 방법에 대한 전문가의 의견을 구하는 대신에 다음을 제안 할 수 있기를 바랍니다. 내가하려고하는 것에 대한보다 자연스러운 데이터 구조는 다음과 같습니다. 나는 데이터 열을 읽고있다. 각 열은 하나의 변수 (Animal, Color, Crop, ... - 45 개가 있습니다)입니다. 각 데이터 행에는 해당 열의 변수 값이 있습니다. 미리 값 또는 행 수를 알지 못합니다.해시 맵의 다중 맵을위한 더 나은 데이터 구조
Animal Color Crop ...
-------------------------------------
cat red oat
cat blue hay
dog blue oat
bat blue corn
cat red corn
dog gray corn
... ... ...
내가 읽고 끝났어요 때, 변수가 걸린, 각 값을 각각의 변수를 캡처하고 몇 번이나 그 변수가 같은, 그 값을했다한다 :
Animal [cat, 3][dog,2][bat, 1]...
Color [blue, 3][red,2][gray,1]...
Crop [corn,3][oat, 2][hay,1]...
...
나는 시도했다 내가 잘 할 정확히 무엇을 만든 것 같다
Map<String, Integer> eqCnts = new HashMap<String, Integer>();
Multimap<String, Map> ed3Dcnt = HashMultimap.create();
for (int i = 0; i + 1 < header.length; i++) {
System.out.format("Got a variable of %s\n", tmpStrKey = header[i]);
ed3Dcnt.put(tmpStrKey, new HashMap<String, Integer>());
}
,하지만 매우 어색하고 작업에 지루한입니다 : 여러 가지 접근 방식, 내가 가까이서 보는이 같은 해시 맵의 구아바 멀티지도입니다 와 함께 nd 또한 신비한 방식으로 동작합니다 ("ed3Dcnt.put()"이 HashMap을 삽입 했음에도 불구하고 해당 ".get()"은 HashMap을 반환하지 않고 완전히 새로운 일련의 문제가 있습니다.) 결과를 가장 높은 값에서 가장 낮은 값으로 정렬하고 싶습니다만, 충분히 쉽게 할 수 있다고 생각합니다.
그렇다면 데이터 구조 디자인을 더 잘 선택하는 것이 좋습니다. 분명히 더 나은 디자인 선택이 없다면 .get()이 반환하는 콜렉션을 어떻게 사용할 수 있습니까? 원하는 모든 것은 그 슬롯에 넣은 단일 HashMap입니까?
덕분에 매우 - 에드
대단히 감사합니다. 좋은 답변이며 명확하게 정리되었습니다. 그것은 저를위한 간계를했다.MultiSet (HashMap 인터페이스의 신인 오류에 대해 유감스럽게 생각한다)과 카디널리티 맵 개념에 대한 두 가지 매우 중요한 기여에 대해 @slanec과 herman에게도 많은 감사를 전한다. – EdB
HashMap은 인터페이스가 아니며 Map의 하위 클래스 중 하나입니다. 지도 유형과 값 유형 모두에 대해 Map 인터페이스를 사용하는 것이 좋습니다. 'Map map = 새 HashMap >()'. 지도의 구체적인 하위 유형을 참조 할 필요는 없습니다. –
herman