集合 迭代器 泛型
目录
Collection中的常用功能
boolean add(E e) 返回值一定为true,因为ArrayList允许重复添加
void clear() 清空集合
boolean contains(Object o) 判断集合中是否含有指定元素值,含有则返回true
boolean isEmpty() 判断是否为空,空则返回true
boolean remove(Object o) 删除集合中指定元素,成功即返回true
int size() 返回集合中现有元素个数
Object[] toArray() 将集合转换为一个Object类型数组
package Test;
import java.util.ArrayList;
import java.util.Collection;
/**
* @author Lzy
* @creat 2021-03-15-13:28
*/
public class CollectionDemo {
public static void main(String[] args) {
Collection collection = new ArrayList();//父类引用指向子类对象
System.out.println(collection.add("hello"));
System.out.println(collection.add("xiaoli"));//分两次添加集合元素,成功返回true
System.out.println(collection.contains("hello"));//验证集合中是否有 hello 这一元素
System.out.println(collection);
System.out.println("-------分割线------");
collection.clear();//清空集合
System.out.println(collection.isEmpty());//判断是否为空
collection.add("xiaowang,xiaozhang,xiaoliu");
collection.add("niu");
collection.add("huhuhu"); //分次加入元素集
System.out.println(collection.remove("niu"));
System.out.println("length:" + collection.size());
Object[] object = collection.toArray();//将元素集转换为数组遍历输出
for (int i = 0; i < object.length; i++){
System.out.println(object[i]);//从输出结果知add每次只能添加一个元素集
}
}
}
迭代器
Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。
一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代
package Test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
* @author Lzy
* @creat 2021-03-15-16:18
* Interator: 用于遍历集合
* E next(): 返回下一个元素
* boolean hasNext():判断是否有元素可取
*注意:使用next方法获取下一个元素,没有元素可获取时报错如下
* Exception in thread "main" java.util.NoSuchElementException
*
*/
public class InteratorDemo {
public static void main(String[] args) {
Collection collection = new ArrayList();
collection.add("hello");
collection.add("xiao");
collection.add("liu");
Iterator iterator = collection.iterator();
while (iterator.hasNext()) System.out.println(iterator.next());
}
}
并发修改异常
Exception in thread "main" java.util.ConcurrentModificationException
当使用迭代器遍历集合的时候,使用了集合中的 增加/删除 方法,导致并发修改异常产生
迭代器是依赖于集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合不一样,则抛出异常
解决方案:一 不使用迭代器遍历集合,就可以在遍历的时候使用集合的方法进行增加或删除
二 在使用迭代器进行遍历的时候使用迭代器来进行修改
package Test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
* @author Lzy
* @creat 2021-03-15-17:16
使用Iterator的子接口ListIterator来实现向集合中添加元素
*/
public class InteratorDemo1 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("11");
list.add("22");
list.add("33");
ListIterator listIterator = list.listIterator();
while (listIterator.hasNext()){
String string = (String) listIterator.next();//将集合转为String类型
if (string.equals("22")) listIterator.add("ll"); //判断当集合中元素等于 22 时 在集合中添加 ll
}
System.out.println(list);//输出集合中的元素
}
}
泛型
集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在转换的时候出现类型转换异常,java为了解决这个问题,给我们提供了一种机制,叫做泛型
是一种广泛的类型,把明确数据类型的工作提前到了编译时期,借鉴了数组的特点
* 泛型好处:
* 避免了类型转换的问题
* 可以减少黄色警告线
* 可以简化我们代码的书写 当我们看到<E>,就可以使用泛型了
package Test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
* @author Lzy
* @creat 2021-03-15-18:15
*/
public class GenericDemo {
public static void main(String[] args) {
Collection<People> collection = new ArrayList<>();//定义集合对象并使用泛型
People people = new People("xiaoliu","famale",20);
People people1 = new People("xiaoli","male",21);
collection.add(people);
collection.add(people1);//将新建的元素对象添加入集合
Iterator<People> iterator = collection.iterator();
while (iterator.hasNext()){
People p = iterator.next();
System.out.println(p.name + " "+ p.age);
}//遍历输出集合对象
}
static class People {
String name,sex;
int age;
public People(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}//定义people类
}
}
增强for循环
用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作
格式 : for(元素的数据类型 变量 : Collection集合or数组){ }
用于遍历Collection和数组。通常只进行遍历元素,不能遍历的过程中对集合元素进行增删操作
package Test;
import java.util.ArrayList;
import java.util.Collection;
/**
* @author Lzy
* @creat 2021-03-15-18:37
*/
public class ForEachDemo {
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("hello");
collection.add("xiaoli");
collection.add("Come on!");
for (String string : collection) {
System.out.print(string+" 变为大写 ");
System.out.println(string.toUpperCase());//toUpperCase转换大写
}
}
}