2013-09-24 5 views
0

String을 키로, Object를 value로 사용하는 HashMap이 있습니다. HashMap을 정렬하려면 TreeMap을 만들고 HashMap을 반복하고 HashMap의 각 항목을 TreeMap에 넣습니다 키가 대역폭과 값입니다 signal.Here의 인스턴스는HashMap을 Sorted TreeMap으로 변환

public void createSortedSet(HashMap<String, Signal> map, long totalSize) { 
TreeMap<Float, Signal> sortedMap = new TreeMap<Float, Signal>(); 
JOptionPane.showMessageDialog(null, map.size()); 
    try { 

    final Iterator<String> iterator = map.keySet().iterator(); 
    while (iterator.hasNext()) { 
     String messageName = iterator.next(); 
     Signal signal = map.get(messageName); 
     signal.setBandwidth((signal.getSize()/(float) totalSize) * 100); 
     sortedMap.put(signal.getBandwidth(), signal); 
    } 
    JOptionPane.showMessageDialog(null, sortedMap.size()); 

    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
} 

문제는 여기에 내 코드 while 루프 후 나는 그것이 (455)를 제공 트리 맵의 크기를 검사 할 때 동안지도의 크기는 8318입니다 ?? 신호의 모든 인스턴스가 TreeMap에 저장되는 것은 아닙니다.

어떤 도움말이 필요합니까?

+0

여러 신호 객체가 같은 크기를 공유하는지 확인하려면 디버거를 실행하십시오. – Tap

+0

같은 대역폭을 의미합니까? – Wearybands

+0

그렇습니다. 그러나 totalSize는 변하지 않기 때문에 대역폭은 크기까지 내려갑니다. – Tap

답변

0

TreeMap에서 HashMap과 다른 키를 사용하고 있습니다. Map이므로 키가 고유해야합니다. put 메서드는 이전 값을 동일한 키로 바꿉니다. 새 키를 계산할 때 중복이 발생하고 새지도의 크기가 이전지도보다 작아집니다.

0

"크기"(getSize()에서 반환)가 동일한 원본지도에 항목이 있다는 것을 알고 있습니다. 맵은 같은 키에 대해 여러 값을 가질 수 없기 때문에 원본과 동일한 "크기"를 가진 항목이 제거됩니다.

0

서로 다른 신호는 대역폭이 같음 sortedMap.put(signal.getBandwidth(), signal);을 포함합니다.