A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
* 编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value。
*
* */
public class Text2 {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                TreeMap<String,String>  map=new TreeMap<String, String>();
                map.put("zhangsan","23");
                map.put("lisi","13");
                map.put("zhangjiafan","54");
                map.put("fengxun","24");
               
                //第一种方法
                Set  k=map.entrySet();
                Iterator m=k.iterator();
                while(m.hasNext())
                {
                        System.out.println(m.next());
                }
                //第二种方法
                Shu(map);
        }

       
        public static void Shu(TreeMap<String ,String> w)
        {
                TreeMap f=w;
                while(f.lastKey()!=null)
                {       
                        System.out.println("key="+f.firstKey()+"------"+"value="+f.get(f.firstKey()));
                        f.remove(f.firstKey());
                }
               
        }
}
主要看方法shu,在运行时,都打印出来了可是报了异常,运行结果如下
fengxun=24
lisi=13
zhangjiafan=54
zhangsan=23
key=fengxun------value=24
key=lisi------value=13
key=zhangjiafan------value=54
key=zhangsan------value=23
Exception in thread "main" java.util.NoSuchElementException
        at java.util.TreeMap.key(TreeMap.java:1221)
        at java.util.TreeMap.lastKey(TreeMap.java:292)
        at examTest.Text2.Shu(Text2.java:33)
        at examTest.Text2.main(Text2.java:26)

7 个回复

倒序浏览
当f.remove()方法移除最后一对键值对集合变为空时,再调用while中的f.lastKey()时,会抛出NoSuchElementException的C:\Documents and Settings\Administrator\桌面\HO4)92UD`E@S%5BG9C}WPHY0O.jpg
回复 使用道具 举报
本帖最后由 毅心缘 于 2014-7-4 00:49 编辑

楼主请看
  1. import java.util.*;

  2. public class Test3 {

  3.         public static void main(String[] args) {
  4.                 Map<String, String> map = new TreeMap<String, String>();
  5.                 map.put("23", "zhangsan");
  6.                 map.put("13","lisi" );
  7.                 map.put("54", "zhangjiafan");
  8.                 map.put("24", "fengxun");

  9.                 getKey(map);
  10.                 // getEntry();
  11.         }

  12.         public static void getKey(Map<String, String> map) {
  13.                 Set<String> keySet = map.keySet();
  14.                 Iterator<String> it = keySet.iterator();
  15.                 while (it.hasNext()) {
  16.                         String key = it.next();
  17.                         String value = map.get(key);
  18.                         System.out.println("key:" + key + "   value:" + value);
  19.                 }
  20.         }

  21.         public static void getEntry(Map<String, String> map) {
  22.                 Set<Map.Entry<String, String>> entrySet = map.entrySet();
  23.                 Iterator<Map.Entry<String, String>> it = entrySet.iterator();
  24.                 while (it.hasNext()) {
  25.                         Map.Entry<String, String> ma = it.next();
  26.                         String key = ma.getKey();
  27.                         String value = ma.getValue();
  28.                         System.out.println("key:" + key + "   value:" + value);
  29.                 }
  30.         }

  31. }
复制代码



回复 使用道具 举报

你的方法不错。。。。我只是想知道我代码出现什么问题而已,,谢谢了~!
回复 使用道具 举报
java_learner 发表于 2014-7-4 00:35
当f.remove()方法移除最后一对键值对集合变为空时,再调用while中的f.lastKey()时,会抛出NoSuchElementExcep ...

有啥好解决的方法呢?
回复 使用道具 举报
你的while循环有问题,你想一下,当你把集合中的所有元素都取光了,这个集合没有任何元素,那怎么还会有key啊,你要判断的是map集合是不是为空,对吧,所以应该像下面这样改就没问题了!
public static void Shu(TreeMap<String ,String> w)
    {
            TreeMap f=w;
            while(!w.isEmpty())
            {        
                    System.out.println("key="+f.firstKey()+"------"+"value="+f.get(f.firstKey()));
                    f.remove(f.firstKey());
            }
            
    }
回复 使用道具 举报
修正一下 while(!f.isEmpty()),因为你操作的是f,所以判断f就行了
回复 使用道具 举报
:loveliness:                                 
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马