美文网首页
一、java 集合类的使用

一、java 集合类的使用

作者: 善解人依_0f7e | 来源:发表于2018-12-18 17:40 被阅读0次

    1. 引言

    1.1. 集合的由来

      通常我们想要存储一组相同类型类型的数据,首先想到的是数组;数组有个局限性,就是使用数组之前我们首先要指定数组的长度。

      但是我们的程序需要根据程序运行时才知道创建多少个对象,也就是说事先我们并不知道需要多少大小。那怎么办呢?集合便应运而生了!

    2. java集合

    2.1 List

    • 创建并添加元素
      // 新建一个list
      List<String> movies = new ArrayList<>();
      //添加元素
      movies.add("钢铁侠");
      movies.add("蜘蛛侠");
      movies.add("猪猪侠");
      movies.add("复仇者联盟");
      
    • 遍历元素
       //1.普通遍历
      for(int i=0; i< movies.size(); i++){
          // 根据下标获取元素
          String movie = movies.get(i);
          // 打印元素对象
          System.out.println(movie);
      }
      
      //2. foreach 遍历, 冒号 前面就是元素对象,后面是集合
      for (String movie : movies) {
          // 打印元素值
          System.out.println(movie);
      }
      
      //3、迭代器遍历
      // 获取迭代器
      Iterator<String> iterator = movies.iterator();
      //hasNext() 方法 表示是否还有下一个元素,如果有,继续循环,没有就跳出
      while (iterator.hasNext()){
          String movie = iterator.next();
          // 打印元素值
          System.out.println(movie);
      }
       //4、lambda
       movies.forEach(e -> {
          //打印
          System.out.println(e);
          // do some thing...
      });
      
    • 如何删除元素

       1. 普通循环删除
          //1.普通循环删除,
          for(int i=0; i< movies.size(); i++){
              // 根据下标获取元素
              String movie = movies.get(i);
              if("钢铁侠".equals(movie)){
                  // 1、根据下标删除
                  movies.remove(i);
                  // 2、直接删除元素对象
                  movies.remove(movie);
              }
          }
      
      
        打印一下集合看看结果:
          // 打印一下集合
          System.out.println(movies);
      
        结果:[蜘蛛侠, 猪猪侠, 复仇者联盟], 钢铁侠被删除了;

        那么我们想删除集合中所有元素怎么办呢? 最方便的方法是直接调用 movies.clear(), 我们自己实现呢? 我想自己先试试...
         for(int i=0; i< movies.size(); i++){
             // 根据下标删除
             movies.remove(i);
         }
      
        同样我们打印一下看看结果:[蜘蛛侠, 复仇者联盟],集合中竟然还有两个元素没有被删除;看看为什么?

        首先我们先给元素标记一下顺序 0:钢铁侠 1:蜘蛛侠 2. 猪猪侠 3.复仇者联盟;

        第一次循环时,删除了第0个元素,也就是“钢铁侠”,还剩后面三个,但是位置却发生了变化;变成了0:蜘蛛侠 1. 猪猪侠 2.复仇者联盟;

        而第二次循环i已经变成了1,所以直接删除第1个元素,也就是“猪猪侠”,而跳过了0号元素“蜘蛛侠”;

        所以结果也就不正确了,那怎么在原有代码上解决呢,就是删除之后让i回退一个,也就是执行i--;
         for(int i=0; i< movies.size(); i++){
             // 根据下标删除
             movies.remove(i);
             //删除一个之后,让下标同时回退一个
             i--;
         }
      
       2. foreach 删除

        这里不写代码了,它不支持,当你运行的时候会报java.util.ConcurrentModificationException:
      请看https://blog.csdn.net/bimuyulaila/article/details/52088124

       3. 最好的删除方式,迭代器
         // 获取迭代器
         Iterator<String> iterator = movies.iterator();
         // hasNext() 方法 表示是否还有下一个元素,如果有,继续循环,没有就跳出
         while (iterator.hasNext()){
             //先获取一个
             iterator.next();
             //不用传入任何参数,直接删除当前元素
             iterator.remove();
         }
      
       结果不用看,肯定是正确的。

    2.2. Set

    set最大的作用就是去重,下面来看看如何使用?
    
    • 创建并添加元素
      Set<String> movies = new HashSet<>();
      //添加元素
      movies.add("钢铁侠");
      movies.add("钢铁侠");
      movies.add("蜘蛛侠");
      movies.add("猪猪侠");
      movies.add("复仇者联盟");
      
      打印下一看看
      // 打印set
      System.out.println(movies);
      
      结果:[钢铁侠, 复仇者联盟, 蜘蛛侠, 猪猪侠]; 虽然添加两遍“钢铁侠”,但是set里面只有一个,这就是去重功能。
    • 遍历元素
      // 1、迭代器遍历
      Iterator<String> iterator = movies.iterator();
      //hasNext() 方法 表示是否还有下一个元素,如果有,继续循环,没有就跳出
      while (iterator.hasNext()){
          String movie = iterator.next();
          // 打印元素值
          System.out.println(movie);
      }
      // 还可以这样
      for(Iterator<String> iterator2 = movies.iterator(); iterator2.hasNext();){
          // 打印元素值
          System.out.println(iterator2.next());
      }
      // 2、foreach,增强for循环 遍历
      for(String movie : movies){
          // 打印元素值
          System.out.println(movie);
      }
      //3、lambda
       movies.forEach(e -> {
          //打印
          System.out.println(e);
          // do some thing...
      });
      
    • 删除元素

      最好的删除方式,迭代器删除。

    2.3. Map

    • 创建并添加元素
      // 新建一个Map
      Map<String, Integer> movieMap = new HashMap<>();
      // 添加元素, 猪猪侠我看过12次,哈哈
      movieMap.put("钢铁侠", 2);
      movieMap.put("蜘蛛侠", 1);
      movieMap.put("猪猪侠", 12);
      movieMap.put("复仇者联盟", 1);
      
    • 遍历元素
       //1、根据keySe遍历
       for(String key: movieMap.keySet()){
           System.out.println(String.format("key:%s,value:%s", key, movieMap.get(key)));
       }
       //2、foreach
       for(Map.Entry<String, Integer> entry : movieMap.entrySet()){
           System.out.println(String.format("key:%s,value:%s", entry.getKey(), entry.getValue()));
       }
       //3、迭代器
       Iterator<Map.Entry<String, Integer>> iterator = movieMap.entrySet().iterator();
       while (iterator.hasNext()){
           Map.Entry<String, Integer> entry = iterator.next();
           System.out.println(String.format("key:%s,value:%s", entry.getKey(), entry.getValue()));
       }
       
       // 4、lambda
       movieMap.forEach((k, v) -> {
           System.out.println(String.format("key:%s,value:%s", k, v));
       });
      

    相关文章

      网友评论

          本文标题:一、java 集合类的使用

          本文链接:https://www.haomeiwen.com/subject/vbwlkqtx.html