Java Map迭代 以及map排序发生的问题

今天在页面使用jstl的遍历HashMap

      
        
${m.key.stateName }:
${l.states }
 



但是每次刷新时顺序都会变化,原来HashMap是遍历时是无序的!如是就想到使用TreeMap

Map> map=new TreeMap>(); 
 


BaseState的代码 如下:

public class BaseState implements Comparable{  
  
    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 comparator) {  
    this.comparator = comparator;  
} 
 


原来TreeMap是有序的,有序就说明TreeMap中的每个Key元素都需要能比较,只有这样才能排序。如是我就在BaseState这个Bean改成了如下:

    public class BaseState implements Comparable{  
      
        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三种简单的遍历方法

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  entry=(Entry) it.next();
           System.out.println(entry.getKey()+":"+entry.getValue());
           
       }
       
    }
}

 

你可能感兴趣的:(@Java,java)