`

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

 
阅读更多

今天在页面使用jstl的<c:froEach>遍历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中的每个Key元素都需要能比较,只有这样才能排序。如是我就在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三种简单的遍历方法

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());
           
       }
       
    }
}

 
分享到:
评论

相关推荐

    java map实例,排序

    关于Map的排序,Java 8引入了一个新的API——`Map.Entry`的`comparingByValue()`和`comparingByKey()`方法,这使得我们可以方便地对Map的值或键进行比较和排序。例如,可以使用`map.entrySet().stream().sorted(Map....

    Java Map 集合类简介

    【Java Map 集合类简介】 在Java的`java.util`包中,集合类扮演着重要的角色,其中List和Map是最为常见的两种。List的实现例如ArrayList和Vector,它们都是可变大小的列表,适合存储和操作各种类型对象的序列。特别...

    java Map 遍历方法

    本篇文章将详细介绍几种常用的遍历`Map`的方法,包括使用传统迭代器(Iterator)、增强型for循环(For-Each循环)以及通过键集(Key Set)进行遍历。 #### 一、使用Iterator遍历Map 1. **通过`entrySet()`获取迭代...

    Map、Set、Iterator迭代详解

    查看与迭代Map 要查看或迭代`Map`中的元素,可以通过以下几种方式获取视图: - **entrySet()**: 返回`Map`中所有映射关系的`Set`视图。每个元素都是一个`Map.Entry`对象,通过它可以访问键和值。 - **keySet()**: ...

    java-遍历map

    本文将深入探讨如何在Java中使用`keySet`方法来遍历`Map`集合,以及相关的知识点。 ### 一、Java Map接口简介 `Map`接口是Java集合框架的一部分,它提供了存储和检索唯一键对象及其对应的值对象的方法。一个`Map`...

    java中map集合的用法

    这意味着迭代Map时,元素会按照插入的顺序或者最近访问的顺序返回。 **5. Map的基本操作** - `put(K key, V value)`: 将指定的键值对放入Map中,如果键已经存在,则替换旧值。 - `get(Object key)`: 返回与指定键...

    java 集合分组与排序

    它直接在原地对列表进行排序,无需额外的流处理。例如: ```java List&lt;Person&gt; people = ...; Collections.sort(people, Comparator.comparing(Person::getName)); ``` - 流API的`sorted()`:适用于任何可...

    【IT十八掌徐培成】Java基础第13天-01.Map的迭代方式.zip

    在这个主题中,我们将深入探讨Map的迭代方式,包括基本的迭代方法以及如何在实际开发中有效地使用它们。 Map接口不继承Collection接口,因此,不能直接使用for-each循环进行迭代。但是,Map提供了两个主要的迭代...

    java中map集合的用法.doc

    Java中的Map接口是Java集合框架的重要组成部分,它用于存储键值对的数据结构。Map不同于List,List是以索引来访问元素,而Map则是通过键(key)来查找对应的值(value)。Map接口定义了一系列方法,使得我们可以对...

    java集合MAP三种遍历

    在Java编程语言中,`Map`接口是一种非常重要的数据结构,它存储键值对,并确保每个键都是唯一的。本文将详细介绍Java中Map集合的三种遍历方法及其应用场景、优缺点等,帮助读者更好地理解和掌握Map的使用技巧。 ###...

    java中对单层json进行key字母排序

    `java中对单层json进行key字母排序`的标题指出了我们需要对一个单层JSONObject的键进行字母升序排序。描述提到这个资源可以直接在程序中使用,意味着提供了一个功能函数来实现这一操作。 在提供的代码中,可以看到...

    Java Map 按key排序和按Value排序的实现方法

    在Java编程中,Map接口表示一组...总的来说,Java Map的排序可以通过选择合适的实现类(如TreeMap)或者对Map的entrySet进行转换和排序来实现。理解这些概念和方法对于处理需要有序显示或处理的键值对数据至关重要。

    java中map集合的用法.pdf

    在Java编程语言中,Map接口是集合框架的重要组成部分,它提供了键值对(Key-Value)的数据存储方式。Map不是列表或数组,它允许通过键来查找和操作对应的值。本篇文章将详细介绍Map的基本用法和关键特性。 1. **...

    java中Map映射机制

    迭代Map中的元素需要通过视图对象的迭代器来完成,例如: ```java Iterator&lt;Map.Entry, Object&gt;&gt; keyValuePairs = aMap.entrySet().iterator(); while (keyValuePairs.hasNext()) { Map.Entry, Object&gt; entry = key...

    java中set、list和map的使用方法实例

    // java中对象容器主要有Set,List和Map三个接口类。 // 迭代器(Iterator)模式,又叫做游标(Cursor)模式。 // GOF给出的定义为:提供一种方法访问一个容器(container)对象中的各个元素, // 而又不需暴露该...

    Java中实现参数名ASCII码从小到大排序(字典序).doc

    在Java编程中,有时我们需要对一组参数按照字典顺序(ASCII码值从小到大)进行排序,例如在创建签名或构建URL查询字符串时。这里提供了一个名为`createSign`的方法,它接受一个`Map, Object&gt;`类型的参数,并返回一个...

    Java集合排序及java集合类详解(Collection、List、Map、Set)

    ### Java集合排序及java集合类详解 #### 集合框架概述 集合是Java编程语言中非常核心且广泛使用的部分,对于深入理解和高效使用Java语言至关重要。本文将围绕Java集合框架进行详细介绍,包括Collection、List、Set...

    java中MAp介绍

    通过以上介绍,我们可以看到Java中的Map接口及其相关实现类提供了丰富的功能来处理键值对数据。不同的实现类针对不同的应用场景提供了优化和支持。开发者可以根据实际需求选择合适的Map实现类来满足项目的需求。

    map集合以及IO流

    在Java编程语言中,`Map`集合是一种存储键值对的数据结构,它提供了高效的数据查找和操作机制。本文将深入探讨`Map`集合的特性和遍历方式,以及`Set`特性的排序,并介绍如何使用`IO流`,特别是字节流和字符流。 ...

    Java map存放数组并取出值代码详解

    Java map是Java编程语言中的一种常用的数据结构,用于存储键值对形式的数据。在Java中,map可以存放数组,并且可以通过不同的方法来取出值。本文将详细介绍Java map存放数组并取出值的代码详解。 一、使用map....

Global site tag (gtag.js) - Google Analytics