目录

Collection中的常用功能

迭代器

并发修改异常

泛型

增强for循环


 

 

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转换大写
        }
    }
}