java迭代器添加list,Java常用工具之集合(List、增强for循环、迭代器)——Java入门学习第十二天...

Java常用工具——集合

在java中集合是用来存储多个元素的容器;

集合是一个体系庞大,结构层次清晰完整的一项技术

根据API文档使用步骤查找集合类:

1.查找集合类

2.查看该集合所属接口名

3.查看构造方法

4.创建集合对象

5.创建元素对象

6.添加元素到集合中

7.遍历集合

集合和数组的区别:

元素类型:

集合:引用类型(存储基本类型时会自动装箱)

数组:基本类型、引用类型

元素个数:

集合:不固定,可随意扩容

数组:固定,不能改变容量

集合的好处:

不受容器大小限制,可以随时添加删除元素,提供了大量操作元素的方法(判断、获取等)

Java的集合体系

单列集合(Collection)

List(接口,抽象类):

​ ArrayList(子类,实现类)

Set(接口,抽象类):

​ HashSet(子类,实现类)

import java.util.ArrayList;

import java.util.List;

双列集合(Map:key,value)

Map(接口,抽象类):

​ HashMap(子类,实现类)

List集合的特点

特点:可重复,有序(存取顺序相同)

应用:

​ list list = new ArrayList();(父接口指向子类对象)

案例:List集合的简单使用

需求:向List集合中添加三个元素,并遍历打印

public boolean add(E e):将数据添加到集合的末尾,这里的E是泛型的意思,目前可以理解为Object

public int size():获取集合的长度

public E get(int index):根据索引,索取其对应的元素(E=Object)

package list.demo;

/*

1.创建结婚对象

2.创建元素对象

3.将元素对象添加到集合对象中

4.遍历集合

*/

import java.util.ArrayList;

import java.util.List;

public class Test {

public static void main(String[] args) {

// 需求:往List集合中添加3个学生对象,然后遍历

// 1.创建结婚对象

List list = new ArrayList();

// 2.创建元素对象

Student s1 = new Student("大乔",23);

Student s = new Student("大乔",23);

Student s2 = new Student("小乔",18);

Student s3 = new Student("张良",22);

Student s4 = new Student("甄姬",20);

// 3.将元素对象添加到集合对象中

list.add(s1);

list.add(s2);

list.add(s3);

list.add(s4);

list.add(s);

// 直接打印集合

System.out.println(list);

// 获取索引为2的集合

Object o = list.get(2);

System.out.println("所以为2的元素是:"+o);

// 获取集合中的元素个数

System.out.println("list的长度为:"+list.size());

System.out.println("——————————");

// 4.遍历集合

for (int i = 0 ;i < list.size();i ++) {

// i表示的就是集合中每一个元素的索引

Object obj = list.get(i);

System.out.println("索引为 "+i+"的元素为"+ obj);

}

}

}

增强for循环和迭代器

增强for循环:简化数组和集合的遍历

增强for循环格式:

​ for(数据类型 变量名:数组或者集合对象){

​ //循环体,变量即元素

​ }

案例演示(使用增强for遍历List集合)

增强for格式快捷方式:iter+回车,只会生成格式,里面的语句体要自己补充

注意:增强for的底层依赖是迭代器(Iterator)。简单理解:增强for就是迭代器的简写形式

package study5.demo;

import java.util.ArrayList;

import java.util.List;

//通过增强for遍历List集合

//增强for格式快捷方式:iter+回车,只会生成格式,里面的语句体要自己补充

//注意:增强for的底层依赖是迭代器(Iterator)。简单理解:增强for就是迭代器的简写形式

public class For {

public static void main(String[] args) {

// 1.创建集合对象

List list = new ArrayList();

// 2.创建元素对象

// 3.将元素对象添加到集合对象中

list.add(10); //add()里面的数据是Object类型的

list.add(10);

list.add(30);

list.add(10);

list.add(40);

// 4.遍历集合

for (Object obj:list) {

// System.out.println(obj);

// obj是集合中的元素,其本身应该是Integer类型的数据

Integer i = (Integer)obj;

System.out.println(i);

}

System.out.println("——————————");

for (Object obj : list) { //这里的obj与上面的obj无关联的,因为作用域不一样

System.out.println(obj);

}

}

}

为什么需要迭代器?

对过程的重复,称为迭代。迭代器是遍历Collection(List\Set)集合的通用方式,可以在对集合遍历的同时进行添加、删除等操作

迭代器的常用方法

next():返回迭代的下一个元素对象

hasNext():如果仍有元素可以迭代,则返回true

案例演示:(使用迭代器遍历List集合)

package study5.demo;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

//注意:

//列表迭代器是List体系独有的遍历方式,可以在对象集合遍历的同时进行添加、删除等操作,但是必须通过调用列表迭代器的方法来实现

//总结:普通的迭代器在遍历集合的同时不能添加或者删除元素否则会报错:并发修改异常

//列表迭代器在遍历集合的同时可以修改集合中的元素(添加,删除等),必须使用列表迭代器中的方法

public class Test11 {

public static void main(String[] args) {

// 案例演示:(使用迭代器遍历List集合)

// 1.创建集合对象

List list = new ArrayList();

// 2.创建元素对象

// 3.将元素对象添加到集合对象中

list.add("a");

list.add("b");

list.add("c");

list.add("d");

// 4.遍历集合

// 迭代器的用法

// 1.根据集合对象获取其对象的迭代器对象

// Iterator it = list.iterator();

2.判断迭代器中是否有元素

// while (it.hasNext()) { //如果迭代器中有元素,就一直迭代(遍历)

// // 3.如果有就获取元素

// String s =(String)it.next();

// System.out.println(s);

// }

System.out.println("————————————");

// 需求:判断集合中如果有字符串“b”,就在其后边添加一个新的字符串:java

Iterator it = list.iterator();

while (it.hasNext()) {

String s =(String)it.next();

// s开发小技巧:s是一个变量,是从迭代器中获取的。"b"是一个常量,一般在变量和常量进行比较时,会把常量写在前边,变量写在后面

// "b"是一个常量,常量调用方法,即使方法里传一个none,也能规避空指针异常

// s.equals("b")

if ("b".equals(s)) { //这样写可以规避空指针异常

// 能走到这里,说明s里面有元素b

// list.add("java"); //报错:ConcurrentModificationException(并发修改异常):在遍历集合的时候,又往集合添加,或者删除元素

}

System.out.println(s);

}

}

}

package study5.demo;

import java.util.ArrayList;

import java.util.List;

import java.util.ListIterator;

//需求:测试列表迭代器

public class Test12 {

public static void main(String[] args) {

// 1.创建集合对象

List list = new ArrayList();

// 2.创建元素对象

// 3.将元素对象添加到集合对象中

list.add("a");

list.add("b");

list.add("c");

list.add("d");

// 需求:判断集合中如果有字符串“b”,就在其后边添加一个新的字符串:java

// 1.根据集合对象获取其对象的迭代器对象

ListIterator lit = list.listIterator(); //这里已经确定集合里面有多少个元素,所以集合中的数据不可以任意修改,除非通过列表迭代器阿里实现

// 2.判断迭代器中是否有元素

while (lit.hasNext()){

// 3.有就获取元素即可

String s =(String)lit.next();

if ("b".equals(s)) {

// list.add("java"); //报错ConcurrentModificationException

lit.add("java"); //列表迭代器

}

System.out.println(s);

//是先遍历完了再加入java,所以java改为b的话,也不会出现无限循环

}

System.out.println("——————————");

System.out.println(list);

}

}

列表迭代器是List体系独有的遍历方式,可以在对象集合遍历的同时进行添加、删除等操作,但是必须通过调用列表迭代器的方法来实现

ConcurrentModificationException(并发修改异常):在遍历集合的时候,又往集合添加,或者删除元素

总结:普通的迭代器在遍历集合的同时不能添加或者删除元素否则会报错:并发修改异常;列表迭代器在遍历集合的同时可以修改集合中的元素(添加,删除等),必须使用列表迭代器中的方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值