2017-11-07 9 views
1

내가 데이터 유형의 다음과 같은 유형을 포함하는 HashMap의 반복을 시도하고 값의 데이터 형식을 유지 그 끈은 부름 받았다. neighbors은 도시의 ArrayList에 들어있는 개체가자바 HashMaps을 통해 반복하면서

import java.util.*; 
public class city{ 
    String city; 
    public city(String s){ 
    this.city = s; 
    } 
    public String toString() { 
    return this.city; 
    } 
} 

: 여기 내 city 클래스를 구성하는 코드입니다.

Iterator it = graph.entrySet().iterator(); 
    while (it.hasNext()) { 
     Map.Entry pair = (Map.Entry)it.next(); 
      System.out.println("Key :" + pair.getKey()); //prints the city    System.out.println("Value :" + pair.getValue()); //prints the neighbors 
      //for (city c: pair.getValue()){ 
      // System.out.println("Test... " + c); 
      //} 
    } 

이 반복자는 위의 잘 작동 : 내가 지금 같은 반복자를 사용하는 일반 규칙을 사용하여이 해시 맵을 반복 시도하고

import java.util.*; 
public class neighbors extends ArrayList<city> { 
    public neighbors (city[] n) { 
    for (city v : n) 
     this.add(v); 
    } 
} 

: 여기 내 neighbors 클래스를 구성하는 코드는 getKey 및 getValue 문을 잘 인쇄합니다. 내가 겪고있는 문제는 Map.Entry (ArrayList)의 VALUE를 반복하는 데 어려움을 겪고 있다는 것입니다. 내가 주석 처리 한 for 루프는이 작업을 수행하기위한 시도이다. getValue() 메서드가 Object를 반환한다는 것을 알고 있지만 ArrayList라는 값의 데이터 유형을 유지하는 방법은 무엇입니까? city 클래스의 toString() 전략을 따르는 neighbors 클래스에 다른 메서드를 포함해야합니까? HashMap의 이웃을 반복 처리하여 다른 값과 비교할 수 있습니까? 제 질문이 불분명하고 조언, 수정 또는 조언이 도움이 될 경우 알려 주시기 바랍니다. 대신 Iterator에 대한 원시 유형의

답변

0

를 사용하여 매개 변수 유형과 Map.Entry 변수 :

Iterator<Map.Entry<city, neighbors>> it = graph.entrySet().iterator(); 
while (it.hasNext()) { 
    Map.Entry<city, neighbors> pair = it.next(); 
    System.out.println("Key :" + pair.getKey()); //prints the city    
    System.out.println("Value :" + pair.getValue()); //prints the neighbors 
    for (city c: pair.getValue()){ 
     System.out.println("Test... " + c); 
    } 
} 
0

당신은 이웃 클래스를 반복하고 개체를 캐스팅 할 수 있습니다. 물론 그것은 형식 검사에 의해 선행되어야합니다. 도시는 "도시"(라는 하나 개의 필드가있는 경우 당신은 소문자로 시작하는 클래스가 안

  1. (도시, 이웃)
  2. :

    neighbors values = (neighbors) pair.getValue(); 
    for (city c: values){ 
         System.out.println("Test... " + c); 
    } 
    

    좀 이상한 물건을 발견했습니다 String 인 경우), 도시를 나타내는 String을 가질 수 있습니다.

  3. 이웃 클래스에 단지 문자열을 나타내는 도시 목록이 포함되어 있으면 List<String>을 사용하여 도시 목록을 나타낼 수 있습니다.
  4. 지도가 더 읽기 쉽고 추가 수업이 필요없는 Map<String, List<String>>이됩니다.

캐스팅하지 않고 이러한 변경을 수행 한 후에 이와 같이 반복 할 수 있습니다.

for(String city : graph.keySet()){ 
    for(String neighbor : graph.get(city)){ 

    } 
}