码迷,mamicode.com
首页 > 其他好文 > 详细

TreeMap集合根据指定元素,进行删除和修改bug梳理

时间:2020-12-31 12:39:52      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:string   return   demo1   http   iter   出现   load   var   src   

TreeMap根据key中的指定元素进行删除修改

 

利用迭代器进行修改和删除,但是增强for只能进行修改,用来删除将会报错,则该方法不能进行删除,删除将报错,

凑巧要删除的是最后一个才能删除,所以此方式不可用来删除,但是可以修改使用,如果用来删除将会出现以下错误:

技术图片

 

 

使用迭代器,能进行修改和删除

修改不会改变值得个数,修改可以使用迭代器,也可以直接使用增强for进行修改

@Override
   public int compareTo(Student o) {
       int i = this.age - o.age;
       Collator instance = Collator.getInstance(Locale.CHINESE);//因为值可能为汉字所以使用Collator静态方法,对汉字进行比较方法
       i=i==0?instance.compare(this.name,o.name):i;
       return i;
       //return -i;//因为要从大到小,而默认规则是负数存左边,正数存右边,排序规则根据返回值而定的,所以直接加减负可以直接改变大小原则
  }

 

 class Demo1 {
   public static void main(String[] args) {
       Student s1 = new Student("张三", 23);
       Student s2 = new Student("李四", 24);
       Student s3 = new Student("王五", 25);
       Student s4 = new Student("赵六", 26);
       TreeMap<Student, String> ts = new TreeMap<>();
       ts.put(s1, "北京");
       ts.put(s2, "上海");
       ts.put(s3, "广东");
       ts.put(s4, "深圳");
       Set<Student> keySet = ts.keySet();
//迭代器删除方式,删除key的姓名为李四的键值对
       Iterator<Student> iterator1 = keySet.iterator();
       while (iterator1.hasNext()) {
           Student key = iterator1.next();
           if (key.getName().equals("李四")) {
               iterator1.remove();//此时注意是用的迭代器的删除方法,而不是Map集合的删除方法,使用Map集合删除方法,此处会报错
          }
      }
       //修改方式一:
       //迭代器修改方式,将张三的值修改为郑州
       Iterator<Student> iterator = keySet.iterator();
       while (iterator.hasNext()) {
           Student key = iterator.next();
           if (key.getName().equals("张三")) {
               ts.put(key, "郑州");
               System.out.println("修改成功");
               
          }
      }
       //bug代码:
       /*
       Iterator<Student> iterator = keySet.iterator();
       while (iterator.hasNext()) {
           if (iterator.next().getName().equals("张三")) {
               ts.put(iterator.next(), "郑州");
           }//此逻辑不会编译报错,运行也不报错,但是逻辑不通,,但是会修改到下一个key的值,迭代器的默认指向下一个原理
       }*/
       
        /*
        //修改方式二,增强for修改
        for (Student key : keySet) {
           if (key.getName().equals("张三")){
               ts.put(key,"郑州");
               System.out.println("修改成功");
           }
       }
       */
       System.out.println(ts);
       System.out.println("遍历:");
       for (Student key : keySet) {
           String value = ts.get(key);
           System.out.println(key.getAge() + "岁的" + key.getName() + "," + value);
      }
?
  }
}

效果如下:

从小到大排序:

技术图片

 

 

 

 

从大到小排序:

 

技术图片

TreeMap集合根据指定元素,进行删除和修改bug梳理

标签:string   return   demo1   http   iter   出现   load   var   src   

原文地址:https://www.cnblogs.com/859630097com/p/14191270.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!