Java中用于保存对象的容器,除了数组,就是Collection和Map接口下的容器实现类了,包括用于迭代容器中对象的Iterator接口,构成了Java数据结构主体的集合体系。其中包括:

1. Collection:包括Set、List和Queue;主要的实现类有HashSet、TreeSet、ArrayList、LinkedList和ArrayDeque

2. Map:主要的实现类为HashMap、TreeMap

3. Iterator: 用于遍历集合中的对象

Collection

Collection接口中定义了Set、List和Queue都会用到的方法,包括:

1. 增

boolean add(Object o)

boolean addAll(Collection c)

2. 删

boolean remove(Object o): 删除对象o,只删除第一个符合的对象,成功返回true

boolean removeAll(Collection c):删除集合c包含的所有元素,

boolean removeIf(Predicate<? super E> filter):Java8增强的条件查询,传入函数式Predicate对象filter进行条件删除

boolean retainAll(Collection c):删除c中不包含的元素,相当于取交集

void clear():清除所有元素,长度归0

3. 查

int size()

boolean isEmpty()

boolean contains(Object o):是否包含元素o

boolean containsAll(Collection c):是否包含集合c的所有元素

4. 改

Object toArray():集合变为数组

5. 其它

Iterator iterator():返回一个Iterator对象,用于遍历集合元素

Iterator

Iterator是Java集合的接口成员,提供遍历集合对象的方法。定义了如下4个方法:

1. boolean hasNext():判断是否遍历完成

2. Object next():返回下一个元素

3. void remove():删除上一次next返回的元素

4. void forEachRemaining(Consumer action):Java8新增的Lambda遍历方法

要注意的是:

1. Iterator对象通过集合调用Iterator方法生成。

2. Iterator遍历集合元素时(包括增强for循环),是通过值传递来获取元素的值,因此在迭代中修改元素的值将不起作用。

3. Iterator只能通过自身的remove方法删除对象,而不能调用集合自身的remove方法,否则会导致ConcurrentModificationException异常。

4. Iterator对象的遍历方法,无论是常规的while循环,还是Java8新增的forEachRemaining方法,只能在一个方法中遍历一次集合。(原因在于底层都是通过Next来返回集合元素,在第一轮中已经Next完集合所有元素了,所以再起一轮遍历,hasNext将为false;相反,集合的forEach方法,则可以多轮遍历)

public class IteratorTest {

    public static void main(String[] args) {

        Set<String> books = new HashSet<String>();
books.add("1844年经济学哲学手稿");
books.add("德谟克利特的自然哲学和伊壁鸠鲁的自然哲学的差别");
books.add("资本论");
books.add("自然辩证法");
books.add("1");
//Java8的增强条件删除,需要传入函数式条件
books.removeIf(ele -> ele.length() < 3); Iterator<String> it = books.iterator();
//使用Lambda表达式遍历集合(Iterator对象)
//it.forEachRemaining(obj -> System.out.println("Iterator遍历对象:" + obj)); while(it.hasNext()) {
String book = it.next();
System.out.println(book);
if(book.equals("资本论")) {
it.remove();
}
book = "通往奴役之路";//Iterator不能改变集合元素,赋值失败
} System.out.println(books); //使用Lambda表达式遍历集合(集合对象)
books.forEach(obj -> System.out.println("集合遍历对象:" + obj));
} }

Java容器深入浅出之Collection与Iterator接口的更多相关文章

  1. Java中的集合Collection、Iterator和Foreach用法(一)

    1.Java集合概述 在编程中,常常需要集中存放多个数据.当然我们可以使用数组来保存多个对象.但数组长度不可变化,一旦在初始化时指定了数组长度,则这个数组长度是不可变的,如果需要保存个数变化的数据,数 ...

  2. Java API ——Collection集合类 & Iterator接口

    对象数组举例: 学生类: package itcast01; /** * Created by gao on 15-12-9. */ public class Student { private St ...

  3. java集合 之 Collection和Iterator接口

    Collection是List,Queue和Set接口的父接口,该接口里定义的方法即可用于操作Set集合,也可以用于List和Queue集合.Collection接口里定义了如下操作元素的方法. bo ...

  4. java集合(2)-Collection与Iterator接口

    1 package com.j1803.collectionOfIterator; 2 import java.util.ArrayList; 3 import java.util.Collectio ...

  5. java 数据结构(八):Iterator接口与foreach循环

    1.遍历Collection的两种方式:① 使用迭代器Iterator ② foreach循环(或增强for循环)2.java.utils包下定义的迭代器接口:Iterator2.1说明:Iterat ...

  6. Java容器深入浅出之List、ListIterator和ArrayList

    List是Collection接口的子接口,表示的是一种有序的.可重复元素的集合. List接口的主要实现类ArrayList和Vector,底层都是维护了一套动态的,可扩展长度的Object[]数组 ...

  7. 5.1 java类集(java学习笔记)Collection、List接口及ArrayList、LinkedList类。

    一.类集 类集就是一组动态的对象数组,说类集可能不好理解,类集又称容器,容器顾名思义就是放东西的地方. 类集就是为了让我们更加简洁,方便的存放.修改.使用数据的. 二.Collection接口 我们看 ...

  8. java容器一:Collection概述

    Collection概览 java容器有两类,第一类是Collection,存储的是对象的集合:第二类是Map,存储的是键值对(两个对象以及它们之间的对应关系)的集合 Collection接口下面有三 ...

  9. java - day011 - 集合, ArrayList HashMap,HashSet, Iterator 接口, for-each 循环格式

    集合 ArrayList 丑数: 能被3,5,7整除多次, ArrayList     list 接口             | - ArrayList             | - Linked ...

随机推荐

  1. 《信息安全技术》实验2——Windows口令破解

    实验2 Windows口令破解 在网络界,攻击事件发生的频率越来越高,其中相当多的都是由于网站密码泄露的缘故,或是人为因素导致,或是口令遭到破解,所以从某种角度而言,密码的安全问题不仅仅是技术上的问题 ...

  2. 20155207 2006-2007-2 《Java程序设计》第4周学习总结

    20155207 2006-2007-2 <Java程序设计>第4周学习总结 教材学习内容总结 ISP原则:一个类对另一个类的依赖应该限制在最小化的接口上. OCP原则:软件构成(类,模块 ...

  3. 20155212 实验三 敏捷开发与XP实践

    20155212 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器&g ...

  4. 20155235 2006-2007-2 《Java程序设计》第1周学习总结

    20155235 2006-2007-2 <Java程序设计>第1周学习总结 教材学习内容总结 第二章 使用的JRE不同,对JAVA的执行有什么影响 第三章 字符串的用法在JAVA和C中有 ...

  5. SaltStack入门篇(四)之深入理解SaltStack远程执行

    1.目标 2.执行模块 3.返回 salt ‘*’ cmd.run ‘uptime’ 命令 目标 执行模块 执行模块参数 1.SlatStack远程执行–目标 执行目标:https://docs.sa ...

  6. Flask 路由相关操作

    URL Route URL 后接 / 作为目录级访问 URL 后不接 / 作为文件级访问 from flask import Flask app = Flask(__name__) @app.rout ...

  7. python2 - 列表

    列表 a = [1,2,3,4,5,6,7] a[0:4:1]//正向索引 a[-1:-2:-1]//反向索引 列表添加 a = [1, 2] b = [3, 4] +:a + b//把a和b连接,重 ...

  8. 自动化之UI(autoit)

    自动化 说到自动化,我真的很不喜欢UI这层去做实践.前置条件要求比较严谨,如果不满足特定的前置条件,那么成本实在太大了. 投入与产出差过大,效果打折扣.从互联网来说,UI自动化是入门门槛很低的一种实践 ...

  9. selenium自动化之js处理滚动条和元素聚焦

    selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 当我们页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接操作的,会报元素不可见异常的.这时候需要借助滚动 ...

  10. HIVE中的数据怎么导出到hdfs或本地呢

    思路一:重定向 在我不知道工具 ,也不熟悉HIQL语法的情况下,没办法了,只有选择一个最简单粗暴的方法,重定向. 在shell中使用 hive -e 可以在shell中执行hive命令,hive -f ...