集合 迭代器 泛型

目录

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

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值