HashMap 사용에 대해서
단순랩퍼
지금 Dijkstra 를 구현하는 중입니다.
제가 궁금한점은 HashMap 에 관한건데,
Globol 변수 HashMap V, HashMap V, Integer table 에각 Vertex 마다 이웃들의weight가 저장되어있습니다.
무게와 진행경로(predecessors)을 받아올려고 하는데.
start node 와 end node를 parameter로 받는 getEdgeCost(V s,V e ) 부분에서
새로운 Map 변수를 받아 무게를 구합니다.
int get EdgeCost(V s,V e)
{
Map V, Integer map = table.get( s);
int weight =map.get( e);
return weight;
}
이런 식으로 구현할려고 했는데,
문제점이 생기더군요 바로weight 가 null 값을 받아오는 것입니다.
debug를 해보니e 값이 새로운 map상에 없는 값으로 나오더군요...
그래서 entrySet을 사용하니제대로 된 값을 받아오더군요...
이것이 새로운 코드입니다.
int getEdgeCost( V start, V end )
{
SetEntryV,HashMapV,Integer set1 =table.entrySet( );
Iterator Entry V, HashMap V, Integer itr =set1.iterator( );
Entry V, HashMap V, Integer entry1 =null;
HashMap V, Integer tmpHash = null;
while( itr.hasNext( )) {
entry1 =itr.next( );
if( entry1.getKey( ).equals( start )) {
tmpHash =entry1.getValue( );
break;
}
}
SetEntryV,Integer set2 =tmpHash.entrySet( );
Iterator Entry V, Integer itr2 =set2.iterator( );
Entry V, Integer entry2 =null;
while( itr2.hasNext( )) {
entry2 = itr2.next( );
if( entry2.getKey( ).equals( end)) {
weight =entry2.getValue( );
break;
}
}
return weight;
}
왜 한번에 바로 값을 받아올수 없는지에 대해서 알고싶습니다...
그리고 hashCode는 어떤방식으로 구하는지도 알고싶습니다...
긴 글 읽어 주셔서 감사합니다...