2012-06-02 2 views
3

나는 자바 클래스를 복용하고있어 강사는 우리가 이런 HashMap에 구축했다 : 자동차 객체가 자동차 (같은이 Toyota Corolla 8 90000을)의 파일에서 읽어Java 초보자 : SortedSet 항목의 해시 맵에 액세스하는 방법?

Map<String, SortedSet<Car>> makeSetMap = new HashMap<String, SortedSet<Car>>(); 

을 그들을 얻기 위해 몇 가지 처리를 할 위에서 설명한대로 해시 맵에 추가하십시오. 따라서지도의 키는 제조업체 이름 (Toyota)으로 끝나는 문자열이며 값은 자동차의 SortedSet입니다.

나중에 사용자가 표시 할 모델을 선택할 수 있도록 앱을 설정해야합니다. 그런 다음 해당 모델의 자동차 데이터 만 표시합니다. 지금 당장 나는 전체적인 모든 데이터에 액세스하는 방법을 생각해 내야 만합니다. 해시 맵에 대한 코드를 작성했으며 반복기를 사용하여 표시 할 제조업체 이름을 얻을 수는 있지만 개별 자동차 데이터를 표시하는 방법을 알 수는 없습니다. :(

다음

내가 지금까지 무엇을 - 그것은이 조각이다,하지만 난 너희들이 그것을 알아낼 수 있다고 생각 :

//I'm starting to have trouble here.. 
    Set<String> brands = makeSetMap.keySet(); 
    System.out.println("Brands are: " + brands.toString()); 
    Iterator<String> brandsIt = brands.iterator(); 

    while (brandsIt.hasNext()) 
    { 
     SortedSet<Car> brandmodels; 
     //brandmodels = brandsIt.next(); 
     //System.out.println("Working on: " +brandmodels.toString()); 

    } 

도움말 날을 곧게 수있는 사람에게 감사

+1

더 많은 코드를 게시 할 수 있습니까? 이 스 니펫은 전체 그림을 제공하지 않습니다. – eabraham

답변

1

을 위하여!. 각 메이커에 대한 모든 자동차 모델을 인쇄 :

Map<String, SortedSet<Car>> makeSetMap = new HashMap<String, SortedSet<Car>>(); 

// ... 

for(String key: makeSetMap.keySet()) { // loop through all manufacturers 
    SortedSet<Car> cars = makeSetMap.get(key); 
    for(Car c: cars) { // loop through all cars of that key 
     System.out.println(key + " " + car); 
    } 
} 

Car 클래스는 toString 재정을 가지고 가정

. 16,
+0

keySet을 반복하고 각 반복을 검색하는 것이 아니라 entrySet을 반복하는 것이 약간 더 효율적입니다. –

+0

@JBNizet 잘 모르겠습니다. 엔트리 세트가 키 집합의 순서와 일치한다는 보장이 있습니까? 우리가 이미'HashMap'을 가지고 있다면, 각 연산에 ​​대한 검색은 O (1)이어야합니다. – Nicholas

+0

HashMap은 특정 순서를 유지하지 않기 때문에 여기서는 중요하지 않습니다. 그러나 LinkedHashMap과 SortedMap은 이러한 보장을 제공합니다. –

0

그래서 당신은이

Map<String, Set<? extends Car>> carMap = ... 

같은지도가 그리고 당신은 모든 도요타의 차를 원하는 경우에, 당신은 간단하게 할 것이다 : 당신이 반복하려면

Set<? extends Car> allToyotas = carMap.get("Toyota"); 

은, 당신은 할 수 있습니다 :

for(Car toyota : allToyotas) { 
    System.out.println(toyota); 
} 
0

이와 비슷한? 이 같은 것을 사용할 수 있습니다

for (Map.Entry<String, SortedSet<Car>> entry : makeSetMap.entrySet()) { 
    String manufacturer = entry.getKey(); 
    SortedSet<Car> cars = entry.getValue(); 
    System.out.println("Working on: " + manufacturer); 

    for (Car car : cars) { 
     System.out.println(" Car: " + car); 
    } 
} 

특정 제조 업체 자동차에 액세스하려면 :

Set<String> brands = makeSetMap.keySet(); 
System.out.println("Brands are: " + brands.toString()); 

for(String brand : makeSetMap.keySet()) { 
    SortedSet<Car> brandmodels = makeSetMap.get(brand); 
    for(Car car : brandmodels){ 
     System.out.println(car); 
    } 
} 
3

이 같은 것을 사용할 수있는 모든 데이터에 액세스하려면

for (Car car : makeSetMap.get("Toyota")) { 
    System.out.println("Car: " + car); 
} 
0

예를, 나는 그것을 생각 밖으로 이것과 다른 코멘트에 기초하여 밖으로! 여러분의 도움에 감사드립니다! 아휴! 기본적으로 makeSetMap을 빌드하는 동안 (1-toyota, 2-honda)와 같은 제조업체 이름의 맵 ("makeMap")을 빌드해야했습니다. 런타임시 사용자 입력을 스캔하여 제가 수집 한 것이 었습니다. 사용할 제조업체 이름을 사용하면 해시 맵에서 모든 자동차를 추출하고 데이터를 표시 할 수 있습니다. 이 코드 스 니펫은 내가 누락 된 핵심 요소였습니다. SortedSet<Car> carSortedSetTmp = makeSetMap.get(makeMap.get(choice));