2010-01-21 7 views
1

지도를 구현하는 컬렉션을 만들 수 있습니까?컬렉션 및지도

+0

입니까? http://en.wikipedia.org/wiki/Map_(disambiguation) – MBO

+5

이것은 이미 짧은 시간 내에 요청한 컬렉션 /지도와 관련된 세 번째 질문입니다. 똑똑한 방법으로이 질문을 하나의 질문으로 그룹화해야합니다. 나는. 전체 기능 요구 사항을 자세하게 기술하고, 기존 구현이 왜/어떻게 실패하는지 상세히 설명합니다. oneliner를 다른 주제로 게시하지 마십시오. ** ** ** ** ** ** **에 대해서는 반 복제 만 가능합니다. 읽기 : http://catb.org/esr/faqs/smart-questions.html – BalusC

답변

4

지도는 기본적으로 "컬렉션"입니다. 그러나 Map interface을 구현하면 을 확장하지 않으므로 Map 인터페이스는 서브 클래스가 Collection이되지 않습니다. 그 이유는 맵이 키 - 값 쌍에서 작동하는 반면 콜렉션은 그룹화 된 단일 오브젝트 일 뿐이 기 때문입니다.

MapCollection 인터페이스 간에는 약간의 충돌이 있습니다. 예를 들어, toArray의 구현이 있어야합니다.이지도는 나에게 의미가 없습니다. 또한 remove 메서드에는 다른 서명이 있습니다.

+1

@Thomas -지도의 toArray는 아마도 Map.Entry 배열입니다. 그러나 제거 지점은 유효합니다. – MetroidFan2002

+1

사실, 맵에서는 IMO라는 모호한 함수입니다. i % 2 == 0이 키이고 i % 2 == 1이 값이되도록 배열을 반환합니까? 아니면 그냥 가치? 아니면 그냥 열쇠? –

2

질문을 이해하는 데는 두 가지 방법이 있습니다.

기술적 인 수준에서 클래스가 두 인터페이스를 동시에 구현할 수 있습니까? 아니요, remove 메소드가 두 인터페이스 사이에서 호환되지 않기 때문에 (하나는 Object를 리턴하고 다른 하나는 부울) 리턴합니다.

개념적 수준에서 Map의 Map.EntrySet은 Map의 Collection 표현의 일종이므로 Collection이 필요할 때 활용할 수 있습니다.

지도의 값 모음 만 있으면 Map.values ​​() 메소드를 사용하면됩니다.

1

예, 단일 클래스로 두 가지 인터페이스를 구현할 수 있습니다. 을 편집하십시오. remove 메소드의 비 호환성을 제외하고는. (thanks to Thomas)

그러나이 경우 Map의 일부 구현을 사용하고 Map.entrySet(), Map.keySet() 및 Map.values ​​()가 항목, 키 및 값 컬렉션을 반환한다는 사실을 사용할 수 있습니다. 존경합니다.

그것은 아마 당신은 당신이 유지하는 트리 맵을 사용해야하는 키 집합에 대한 액세스 권한을 주문하고 키의 나무를 주문해야하는 경우, 당신은에 관심이 컬렉션.

에 액세스하는 방법을 할 수있는 달려있다.

1

이것은 동일한 서명을 가진 콜렉션 및 맵 인터페이스의 제거 메소드에서 리턴 유형과의 비 호환성으로 인해 이 가능하지 않습니다.

.

반환 유형은 boolean

java.util.Collection 
public boolean remove(Object o) 

입니다.

반환 유형 당신은 "지도 (고차 기능)"또는 "연관 배열"을 의미 java.lang.Object

java.util.Map 
public Object remove(Object key)