java【集合遍历】

本贴最后更新于 1333 天前,其中的信息可能已经时异事殊

map 集合

1.通过获取 key 的形式进行遍历

//Set<String> set = map.keySet(); //得到所有key的集合
for (String in : map.keySet()) {
    String str = map.get(in);//得到每个key多对用value的值
}

2、通过 Map.entrySet 使用 iterator 遍历 key 和 value

Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
     Map.Entry<Integer, String> entry = it.next();
       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}

3.通过 Map.entrySet 获取一个 set 集合,然后在 set 集合遍历 key 和 value,推荐,尤其是容量大时

for (Map.Entry<Integer, String> entry : map.entrySet()) {
    //Map.entry<Integer,String> 映射项(键-值对)  有几个方法:用上面的名字entry
    //entry.getKey() ;entry.getValue(); entry.setValue();
    //map.entrySet()  返回此映射中包含的映射关系的 Set视图。
    System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}

4.通过 Map.values()遍历所有的 value,但不能遍历 key

for (String v : map.values()) {
    System.out.println("value= " + v);
}

List 集合

第一种;

for(Iterator iterator = list.iterator():iterator.hasNext()){  
    int i = (Integer) iterator.next();   
    System.out.println(i);   
}

第二种迭代器方式

Iterator iterator = list.iterator();
while(iterator.hasNext()){
    int i = (Integer) iterator.next();
    System.out.println(i);
}

第三种 for 循环

for (Object object : list) { 
    System.out.println(object); 
}

第四种普通角标形式

for(int i = 0 ;i<list.size();i++) {  
    int j= (Integer) list.get(i);
    System.out.println(j);  
}

集合遍历过程基本规则

各遍历方式的适用于什么场合?

  1. 传统的 for 循环遍历,基于计数器的:

    顺序存储:读取性能比较高。适用于遍历顺序存储集合。

    链式存储:时间复杂度太大,不适用于遍历链式存储的集合。

    1. 迭代器遍历,Iterator:

      顺序存储:如果不是太在意时间,推荐选择此方式,毕竟代码更加简洁,也防止了 Off-By-One 的问题。

      链式存储:意义就重大了,平均时间复杂度降为 O(n),还是挺诱人的,所以推荐此种遍历方式。

      1. foreach 循环遍历:

        foreach 只是让代码更加简洁了,但是他有一些缺点,就是遍历过程中不能操作数据集合(删除等),所以有些场合不使用。而且它本身就是基于 Iterator 实现的,但是由于类型转换的问题,所以会比直接使用 Iterator 慢一点,但是还好,时间复杂度都是一样的。所以怎么选择,参考上面两种方式,做一个折中的选择。

      Java 的集合遍历的小技巧?

      Java 数据集合框架中,提供了一个 RandomAccess 接口,该接口没有方法,只是一个标记。通常被 List 接口的实现使用,用来标记该 List 的实现是否支持 Random Access。

      一个数据集合实现了该接口,就意味着它支持 Random Access,按位置读取元素的平均时间复杂度为 O(1)。比如 ArrayList。

      而没有实现该接口的,就表示不支持 Random Access。比如 LinkedList。

      所以看来 JDK 开发者也是注意到这个问题的,那么推荐的做法就是,如果想要遍历一个 List,那么先判断是否支持 Random Access,也就是 list instanceof RandomAccess。

      例如:

      if (list instanceof RandomAccess) {
          //使用传统的for循环遍历。
      } else {
          //使用Iterator或者foreach。
      }
      
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...