Java容器学习(5)
【摘要】 遍历容器Iterable 接口是集合框架的顶级接口,被所有容器类都实现。提供 iterator 方法,用来创建一个实现了 Iterator 接口的 iterator 对象:按容器类规定的顺序实现遍历集合。JDK 1.8 引入 foreach 方法遍历集合。效率更高,但不能对元素进行删除操作,否则会抛出异常。Iterator 接口提供了 hasNext、next、remove 三个方法,可以按...
遍历容器
Iterable 接口
是集合框架的顶级接口,被所有容器类都实现。
-
提供 iterator 方法,用来创建一个实现了 Iterator 接口的 iterator 对象:按容器类规定的顺序实现遍历集合。
-
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)