Java Map反復およびmapソートの問題

4449 ワード

今日はページでjstlのを使ってHashMapを巡ります
    <c:forEach items="${ydMap }" var="m">  
        <div class="mbody">  
            <div class="title cv">${m.key.stateName }<a href="${pageContext.request.contextPath }/pl/deleteBlackStatesByState.do?id=${m.key.id }&flag=0"><img src="${pageContext.request.contextPath }/images/jh.png" /></a>:</div>  
            <div class="text">  
                <c:forEach items="${m.value }" var="l">  
                    <span class="cv">${l.states }<a href="${pageContext.request.contextPath }/pl/removeBlackStates.do?id=${l.id }"><img src="${pageContext.request.contextPath }/images/jh.png" /></a></span>  
                </c:forEach>  
            </div>  
        </div>  
    </c:forEach>  
 
しかし、更新するたびに順番が変わり、HashMapが遍歴しているときは無秩序だった!TreeMapを使いたい
Map<BaseState,List<BlackChannelStates>> map=new TreeMap<BaseState,List<BlackChannelStates>>(); 
 
BaseStateのコードは次のとおりです.
public class BaseState implements Comparable<BaseState>{  
  
    private Integer id;  
  
    public Integer getId() {  
        return id;  
    }  
  
    public void setId(Integer id) {  
        this.id = id;  
    }  
} 
 
しかし、使用後ずっと報告しています....cannot be cast to java.lang.Comparable TreeMapの原コードを見てみると、HashMapには次のような構造方法があります.
public TreeMap(Comparator<? super K> comparator) {  
    this.comparator = comparator;  
} 
 
もともとTreeMapは秩序化されていたが、秩序化はTreeMapの各キー要素が比較できる必要があることを示しており、このようにしてこそソートすることができる.私がBaseStateというBeanを次のように変更しました.
    public class BaseState implements Comparable<BaseState>{  
      
        private Integer id;  
      
        public Integer getId() {  
            return id;  
        }  
      
        public void setId(Integer id) {  
            this.id = id;  
        }  
      
      
        @Override  
        public int compareTo(BaseState o) {  
            // TODO Auto-generated method stub  
            return o.getId()-this.getId();  
        }  
    }  
 
このエラーを呼び出して解決しました!
 
MAPの3つの簡単な遍歴方法
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;


/**
 * map       
 * @author us
 *
 */
public class test2
{
   public static void main(String[] args)
    {    
       /**
        * new  map,      
        */
       Map map=new HashMap();
       for (int i = 0; i < 10; i++)
        {
            map.put(i+"",i+"");
            System.out.println("  "+i+"  ");
        }
       System.out.println("map  "+map.size());
       
       /**
        * 1.         ,      
        */
//       Collection c=map.values();
//       Iterator it= c.iterator();
//       for (; it.hasNext();)
//        {
//            System.out.println(it.next());
//        }
       
       /**
        * 2. key       ,  key     key    (  )
        */
//       Set set =map.keySet();
//       Iterator it=set.iterator();
//       while(it.hasNext()){
//           String s= (String) it.next();
//           System.out.println(map.get(s));
//       }
//       
       /**
        * 3.   map      entry ,    entry    key  
        */
       Set set =map.entrySet();
       Iterator it=set.iterator();
       while(it.hasNext()){
           Map.Entry<String, String>  entry=(Entry<String, String>) it.next();
           System.out.println(entry.getKey()+":"+entry.getValue());
           
       }
       
    }
}