2013-05-13 2 views
1

: 중첩 된지도 또는 이에 상응하는이 가게에 트리플 내가 세 가지 값을 포함하는 목록/맵에 값을 저장해야

size | amount | description 
2,34 |  4 | "I'm a long String" 
1,14 |  2 | "I'm another long String" 

그래서 내가 좋아하는 중첩 된지도를 사용하는 방법에 대한 생각 :

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

그러나 해당 맵에 항목을 어떻게 쉽게 추가 할 수 있습니까?

a.put(1,43, new Map.Entry<>(7,"9890")); 

작동하지 않았다처럼 구문, Map 추상적 인 원인이된다. 내 중첩 된지도를 얻는 가장 좋은 방법은 무엇입니까?

+7

무엇을 찾고 있는지를 바랍니다. 트리플을위한 클래스를 만듭니다. –

+0

@SotiriosDelimanolis의 의미를 확장하려면 금액과 설명의 쌍이 무엇인지 설명하는 클래스를 만들어보세요. 그런 다음지도 를 사용하거나 세 가지 정보를 모두 캡슐화하여 클래스 또는 세트로 저장할 수도 있습니다 (특정 사용 사례에 따라 다름) –

+0

목적은 무엇입니까? 이 컬렉션의? 열쇠로 액세스해야합니까? –

답변

3

지루한 될 것 :

Map<Integer,String> val1 = a.get(2.34); 
if (val1 == null) { 
    val1 = new TreeMap<Integer, String>(); 
    a.put(2.34, val1); 
} 
val1.put(4, "I'm a long String"); 

난 당신이 가장 작은 요소에 액세스 할 이후로는 트리 맵을을 업데이트되었습니다. 또한 맵 "a"를 TreeMap으로 변경해야합니다.

편집 내가 여기에 노력을 기울이

는, 당신이 캡슐이 당신의 친구입니다 :)

import java.io.IOException; 
import java.util.Map; 
import java.util.TreeMap; 
import java.util.TreeSet; 

public class Main { 

    public static void main(String[] args) throws IOException { 
     TreeMap<Double, TreeMap<Integer, String>> map = new TreeMap<>(); 
     add(2.5, 5, "wrong value 1", map); 
     add(3, 2, "wrong value 2", map); 
     add(2.5, 3, "good value", map); 

     System.out.println(map.pollFirstEntry().getValue().pollFirstEntry().getValue()); 
    } 
    public static void add(double val1, int val2, String val3, TreeMap<Double, TreeMap<Integer, String>> map) { 
     TreeMap<Integer,String> subMap = map.get(val1); 
     if (subMap == null) { 
      subMap = new TreeMap<Integer, String>(); 
      map.put(val1, subMap); 
     } 
     subMap.put(val2, val3); 
    } 

} 
0

그냥 엔트리 클래스 정의 :

final class Entry { 
    final int amount; 
    final String description; 

    Entry(final int amount, final String description) { 
     // check parameters 
     this.amount = amount; 
     this.description = description; 
    } 


    // implement getAmount 
    // implement getDescription 
} 

과지도의 유형은

Map<Double, Entry> 
+0

동일한 이중 값에 대해 "항목"을 사용해야하는 경우 작동하지 않습니다. – Igor

+0

왜 반쪽입니까? 세 가지 데이터 요소 모두에 대해 단일 클래스를 구현 한 다음지도, 목록 등 원하는 컬렉션을 만드는 것이 좋습니다. –

0

으로 @Sotirios Delimanolis는 사용자의 필요에 따라 당신이 수집하여 삼중위한 클래스를 생성하고 선택해야 언급이다 . 객체를 저장하고 그 객체를 반복하려는 경우 List을 사용하십시오. 단순하거나 복잡한 고유 키를 사용하여 객체에 대한 액세스를 허용해야하는 경우 Map.

주의 : DoubleMap의 키로 사용하지 마십시오. 유형이 double 인 두 개의 "동일"값이 실제로 같지 않을 수 있으므로 중복 된 항목이 표시됩니다.