2016-10-08 3 views
0

그래서 3 개의 레이어가 있습니다. 값이 다른지도 인 키, 값 쌍으로지도가 있습니다. 두 번째 맵은 값이 바로 값인 키, 값 쌍을가집니다.지도의지도를 만드시겠습니까?

각 키에는 다른 키가 쌍으로 있고 두 번째 키에는 값이 있습니다. 예를 들어

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

너무 :

1 => fruit => apple 
    => color => red 
    => day => friday 

2 => fruit => orange 
    => color => blue 
    => day => monday 

3 => fruit => banana 
    => color => red 
    => day => thursday 

을 그래서 내가 원하는 경우 내가 Map<Integer, Map<String, String>> multiMap = new HashMap<>();

을 할 경우이 내가지도에 둘 필요가 데이터가

내가 시도 할 것입니다 내가 좋아하는 2 색을 얻으려면 favColor2 = multiMap.get(2).get(color) 또는 이와 비슷한 것을하고 싶습니다.

이 최선의 방법은 무엇입니까? 지도에 데이터를 추가 할 때 문제가 있습니다.

이 데이터를 추가 할 수 없습니다. 그것은 오류를 제공합니다. 그래서 나는 처음에 multiMap.put(1, new HashMap<String, String>());을 시도한 다음 "과일"을 추가하려고 시도합니다. 하지만 작동하지 않습니다.

+1

당신이하고있는 일은 제가 할 수있는 방법 일 것입니다.하지만 다른 방법들도 있습니다. 그러나 "나는 이것이 최선의 방법인가?"는 본질적으로 의견을 바탕으로 한 질문이기 때문에 의견을 근거로이 투표를 마감하기로 결정했습니다. – nhouser9

+0

당신이하고있는 방식이 옳다 ... 최선의 방법 ...지도에 관한 것이면 나는 또한 그것을 똑같이 할 것이다. – Tirath

+0

당신이 사용해야하는 것보다 더 많은 정수의 키를 가진지도를 가지고 있다면 내 생각에 대신 ArrayList –

답변

4

에 달려 있습니다. 예를 들어, 두 번째 맵에는 항상 같은 키가있는 것처럼 보입니다. 이 경우, 대신 읽을 수 있도록 개체를 사용하는 것이 좋습니다. 처음으로 코드를보고있는 새로운 프로그래머는이 방법을 더 쉽게 이해할 수 있으며 좋은 방법입니다.

public enum Fruit { 
    APPLE, ORANGE, BANANA; 

    @Override 
    public String toString(){ 
     // If needs be, override it and return a String for the fruit 
    } 
} 

이 일 및 색상에 대해 동일한 작업을 수행 한 후 값 객체를 생성 : 나는 다음과 같은 코드를 건의 할 것

다음
public class MapInfo{ 
    private Fruit fruit; 
    private Color color; 
    private Day day; 

    public MapInfo(Fruit fruit, Day day, Color color){ 
     this.fruit = fruit; 
     this.day = day; 
     this.color = color; 
    } 

    // Create accessors here 

    // Add a toString if needed 
} 

,지도 객체가 될 것

Map<Integer, MapInfo> map = new HashMap<>(); 
1

언제든지 바퀴를 다시 만들 수 있지만 멀티 맵을 사용할 수도 있습니다. 제공 : Guava

동일한 키로 여러 값을 입력하고 수정할 수 있습니다. 그것은 아마도 당신 자신을 위해서 모든 것을하는 것보다 더 깨끗한 구현 일 것입니다.

관련 문제