Java容器深入浅出之Collection与Iterator接口
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接口的更多相关文章
- Java中的集合Collection、Iterator和Foreach用法(一)
1.Java集合概述 在编程中,常常需要集中存放多个数据.当然我们可以使用数组来保存多个对象.但数组长度不可变化,一旦在初始化时指定了数组长度,则这个数组长度是不可变的,如果需要保存个数变化的数据,数 ...
- Java API ——Collection集合类 & Iterator接口
对象数组举例: 学生类: package itcast01; /** * Created by gao on 15-12-9. */ public class Student { private St ...
- java集合 之 Collection和Iterator接口
Collection是List,Queue和Set接口的父接口,该接口里定义的方法即可用于操作Set集合,也可以用于List和Queue集合.Collection接口里定义了如下操作元素的方法. bo ...
- java集合(2)-Collection与Iterator接口
1 package com.j1803.collectionOfIterator; 2 import java.util.ArrayList; 3 import java.util.Collectio ...
- java 数据结构(八):Iterator接口与foreach循环
1.遍历Collection的两种方式:① 使用迭代器Iterator ② foreach循环(或增强for循环)2.java.utils包下定义的迭代器接口:Iterator2.1说明:Iterat ...
- Java容器深入浅出之List、ListIterator和ArrayList
List是Collection接口的子接口,表示的是一种有序的.可重复元素的集合. List接口的主要实现类ArrayList和Vector,底层都是维护了一套动态的,可扩展长度的Object[]数组 ...
- 5.1 java类集(java学习笔记)Collection、List接口及ArrayList、LinkedList类。
一.类集 类集就是一组动态的对象数组,说类集可能不好理解,类集又称容器,容器顾名思义就是放东西的地方. 类集就是为了让我们更加简洁,方便的存放.修改.使用数据的. 二.Collection接口 我们看 ...
- java容器一:Collection概述
Collection概览 java容器有两类,第一类是Collection,存储的是对象的集合:第二类是Map,存储的是键值对(两个对象以及它们之间的对应关系)的集合 Collection接口下面有三 ...
- java - day011 - 集合, ArrayList HashMap,HashSet, Iterator 接口, for-each 循环格式
集合 ArrayList 丑数: 能被3,5,7整除多次, ArrayList list 接口 | - ArrayList | - Linked ...
随机推荐
- 数据结构与算法之有序数组(2)——in dart
本文比第一篇,采用了类实现.增加了运算符重载等功能.本来有序数组是不能修改某个位置的值的,因为这样会打破数组的有序性:但为了演示,保留了修改的方法,但为此增加了排序. import 'dart:mat ...
- C#——数据库取数据,DataGridView显示数据
使用未封装的方法连接数据库 步骤: 一.确定连接方式(以SqlServer为例): ①Windows身份验证. string ConnectionType = "server=.;datab ...
- Hadoop学习总结之Map-Reduce的过程解析111
一.客户端 Map-Reduce的过程首先是由客户端提交一个任务开始的. 提交任务主要是通过JobClient.runJob(JobConf)静态函数实现的: public static Runnin ...
- Cache-Aside模式
Cache-Aside 该模式是从数据仓库中将数据加载到缓存中,从而提高访问速度的一种模式.该模式可以有效的提高性能,同时也能一定程度上保证缓存中的数据和数据仓库中的数据的一致性,和同步数据到数据仓库 ...
- 4825: [Hnoi2017]单旋
4825: [Hnoi2017]单旋 链接 分析: 以后采取更保险的方式写代码!!!81行本来以为不特判也可以,然后就总是比答案大1,甚至出现负数,调啊调啊调啊调~~~ 只会旋转最大值和最小值,以最小 ...
- 通过dotnet命令行设置asp.net core服务的启动地址
需求: 通过dotnet命令行启动asp.net core 服务时,自定义监听端口. 方法: 在program.cs中增加命令行参数配置: WebHost.CreateDefaultBuilder(a ...
- Linux 安装Zookeeper<准备>(使用Mac远程访问)
阅读本文需要安装JDK 一 Zookeeper简介 zookeeper是用java语言编写的一款为分布式应用所设计的协调服务 zookeeper是apacahe hadoop的子项目 使用zookee ...
- Ubuntu常用shell命令
目录 ls cd mkdir mv cp scp rm df du chmod chown chgrp head tail screen apt-get Ubuntu常用shell命令 Ubuntu作 ...
- webpack整体配置结构
摘自<深入浅出webpack>2.8 const path = require('path'); module.exports = { // entry 表示入口,webpack执行的第一 ...
- hive的简单使用
一.一些说明 1.支持的操作 hive 默认不支持updata 和 delete操作 insert也是执行缓慢,主要用于数据的计算 hive 数据类型---字符串,大部分与java一致. 2.内外表的 ...