zoukankan      html  css  js  c++  java
  • TreeMap集合根据指定元素,进行删除和修改bug梳理

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

      }
    }

    效果如下:

    从小到大排序:

    从大到小排序:

     

  • 相关阅读:
    为MySQL的root用户设定密码
    Sublime Text 3安装Package Control失败
    从系统关机后主机仍在运行
    如何判断一个数是否是质数?
    python之lambda函数
    yum的一些命令使用方法
    NopCommerce架构分析-数据持久层
    NopCommerce架构分析-Cache的应用
    NopCommerce架构分析-源码结构和架构
    下载图片
  • 原文地址:https://www.cnblogs.com/859630097com/p/14191270.html
Copyright © 2011-2022 走看看