2012-03-25 2 views
3

프로그래밍에 익숙하지 않아서 어리석은 질문 인 경우 유감입니다. 키 당 하나 이상의 응답을 반환하는 데이터 유형이 있는지 궁금합니다. 예를 들어 사용자가 입력하는 경우여러 개의 결과가 나오는 키

TestType<int,String> test = new TestType<int,String>();

그래서, test.getKey (1), 당신은 { "안녕하세요", "이", "테스트", "A" "입니다"} 얻을 수 있습니다.

기본적으로 HashMap과 List와 같은 일종의 복수 응답을 반환 할 수있는 데이터 유형이 있습니까?

+0

사실 그것은 훌륭한 질문입니다. –

답변

1

, 여러 Guava의 구현 및 아파치 평민 collections 다른 하나가 당신이 multimap에라고 요구하고 있습니다.

+0

이 종류의 anwer가 매우 자주 등장하기 때문에 호기심에서 벗어났습니다. 왜 단일 데이터 구조 만 사용하고 제 3 자 라이브러리에 의존성을 도입하는 이유는 무엇입니까? – Cratylus

+1

@ user384706 : 제 3 자 라이브러리에 익숙해지는 것이 중요합니다. 구현하고자하는 많은 것들이 이미 존재하며,이를 이해하는 것이 항상 좋은 방법입니다. 또한 아파치는 신뢰할 수있는 제 3 자로 간주되며 그 구성 요소는 널리 사용되고 널리 테스트되고 있습니다. – amit

+0

@amit : 당신이 말하는 것을 이해합니다.하지만 라이브러리를 너무 쉽게 도입하면 사소한 기능에 대해서도 꽤 큰 응용 프로그램으로 끝납니다.이 모든 경우가 동일하지만 내 상사가 4MB를 추가로 좋아하지 않을지 확실하지 않습니다. lib 그냥 1 데이터 구조를 사용하는 것 – Cratylus

5

표준 Java에 없습니다. 그러나 Guava MultiMap 콜렉션 유형을 사용할 수 있습니다. 멀티 맵 컬렉션을 제공하는 다른 라이브러리가 있습니다.

타사 라이브러리를 사용하고 싶지 않은 경우 사용자 고유의 데이터 구조를 롤 할 수도 있습니다. 그러나, 그것은 분명히 바퀴를 reinventing하고 그것은 약간의 고통이야. testMap<Integer, Set<String>>으로 정의한 다음 적절한 조건에서 빈 세트가있는 키 항목을 초기화하는 액세스 메소드를 작성하십시오.

자바에서는 제네릭 형식 매개 변수 값으로 사용할 원시 형식 (예 : int)을 허용하지 않습니다. Integer을 사용해야합니다. autoboxing 때문에 여전히 test.get(1)을 사용하여 1 키 아래에 저장된 값을 검색 할 수 있습니다.

+0

왜'List' 대신'set'을 사용합니까? –

+2

@Samir - 물론 원하는 의미에 따라 다릅니다. Set을 사용하는 동안 List가 실제로 OP 응용 프로그램에서 더 나을 수도 있습니다. 값의 순서가 중요하다면 목록이 올바른 유형이 될 것입니다. 순서가 중요하지 않지만 다중성이 중요하다면, 다중 세트가 더 적합 할 수 있습니다. 순서 나 값의 다양성이 중요하지 않은 경우 (매우 일반적인 경우) Set이 가장 적합합니다. Guava Multimap은보다 구체적인 값 콜렉션 유형을 위해 하위 인터페이스와 함께 콜렉션을 사용합니다. –

+0

구아바는 명확히하기 위해 다양한 사용 사례에 대한 하위 형식 인 ListMultimap 및 SetMultimap을 사용하여 'Multimap'(일반 컬렉션 용)을 제공합니다. –

0

Java는 multimap을 자주 사용하지 않으므로 (설명문) 제공하지 않습니다. 다음과 같이 그러나 SUN 작은 자신이 Map를 사용 multimap은을 만드는 방법에 대한 예와 List을 제공합니다

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

당신은 Java Collections/Maps 여기에 예를 볼 수 있습니다. 예제 코드 인 멀티 맵의 문단을 확인하십시오.

0

Amit 's right track. 대답을위한 수업을 만들 수도 있습니다. 캡슐화를 늘리는 데 도움이 될 수 있습니다. MyAnswer 당신이 관리하고자하는 데이터의 속성을 포함 할 수

Map<Integer, MyAnswer> 

. 여기에 자신 만의 수업을 구현하면 다양한 가능성을 경험할 수 있습니다.

관련 문제