Java容器学习(5)

举报
幼儿园老大* 发表于 2024/09/19 11:17:22 2024/09/19
【摘要】 遍历容器Iterable 接口是集合框架的顶级接口,被所有容器类都实现。提供 iterator 方法,用来创建一个实现了 Iterator 接口的 iterator 对象:按容器类规定的顺序实现遍历集合。JDK 1.8 引入 foreach 方法遍历集合。效率更高,但不能对元素进行删除操作,否则会抛出异常。Iterator 接口提供了 hasNext、next、remove 三个方法,可以按...

遍历容器

Iterable 接口

是集合框架的顶级接口,被所有容器类都实现。

  1. 提供 iterator 方法,用来创建一个实现了 Iterator 接口的 iterator 对象:按容器类规定的顺序实现遍历集合。

  2. JDK 1.8 引入 foreach 方法遍历集合。效率更高,但不能对元素进行删除操作,否则会抛出异常。

Iterator 接口

提供了 hasNext、next、remove 三个方法,可以按容器类规定的顺序实现遍历集合。

遍历顺序

List / Queue 接口

  • 全部方法:按数组或链表顺序输出。

Map / Set 接口

  • HashSet/HashMap 类:在返回数据时没有特别的顺序。
  • LinkedHashSet/LinkedHashMap 类:默认按插入顺序返回数据,也可以按访问顺序返回。
  • TreeSet/TreeMap 类:在返回数据时按 key 值从小到大排列,即按照树的中序遍历返回。

遍历方法

Collection 接口


List<String> list = new ArrayList<>();

// iterator 遍历
Iterator<Integer> iter = list.iterator();
while(iter.hasNext()){              
      int num = iter.next();
      if(num < 0) iter.remove();
}

// 随机遍历(效率更高,但不能进行删除操作)
for (String str : list) {
      System.out.println(str);
}Copy to clipboardErrorCopied

Map 接口


Map<String,String> map=new HashMap<String,String>();

// iterator 遍历
Iterator<Map.Entry<String, String>> iter = map.entrySet().iterator(); 
while (iter.hasNext()) { 
    Map.Entry<String, String> entry = iter.next(); 
    System.out.println(entry.getKey() + entry.getValue()); 
} 

// 随机遍历(效率更高,但不能进行删除操作)
for (Map.Entry<String, String> entry : map.entrySet()) { 
    System.out.println(entry.getKey() + entry.getValue()); 
} 

// 只遍历 key
for (String key : map.keySet()) { 
    System.out.println(key + map.get(key)); 
} 

// 只遍历 value
for (String value : map.values()) { 
    System.out.println(value); 
}Copy to clipboardErrorCopied

遍历失败

在迭代元素的时候不能通过集合的方法修改或删除元素,但可以通过迭代器的 remove 方法删除元素。

  • java.util 包下面的所有的集合类都是快速失败的。直接对原容器进行修改,会抛出 ConcurrentModificationException 异常。

  • java.util.concurrent 包下面的所有的集合类都是安全失败的。遍历时先对底层集合做拷贝再遍历,因此不会抛出异常。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。