集合 迭代器 泛型

目录

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

 

 

 

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
01-17 11:44
你在各大软件投了一份又一份,你打招呼的hr一个接一个,但是只要你投过的,很快就下线了,没关系你的能量是很强,你看过的岗位招到人的速度都增加了。朋友们一个个拿着丰厚的实习回报,你却默默在家刷新邮箱,等待着那寥寥无几的面试通知。你每天一睁眼就狂投简历,你一有面试邀约就点确认。过年亲戚们围坐聊天,谈论着他们孩子的职场成就,你试图插话说自己面试过的公司数量,但他们显然不太感兴趣。你在心里自嘲,觉得他们不懂面试的艰辛、不懂得每一次面试机会的珍贵,不懂得一张张精心准备的简历背后的努力。笑你那个小侄子只会在网上刷刷职位,而你已经是各大招聘网站的常客。亲戚们夸赞自己孩子一年的成就,儿子的新工作,女儿的晋升,而...
龚新化:这帖删了呗,这跟我朋友有点相似,不过我是无所谓的😀,没什么感觉,我不轻易破防的,但是我一个朋友可能有点汗流浃背了😕,他不太舒服想睡了,当然不是我哈,我一直都是行的,以一个旁观者的心态看吧,也不至于破防吧😃,就是想照顾下我朋友的感受,他有点破防了,还是建议删了吧😯,当然删不删随你,因为我是没感觉的,就是为朋友感到不平罢了🥺
点赞 评论 收藏
分享
2024-12-21 01:36
电子科技大学 Java
牛客850385388号:员工福利查看图片
点赞 评论 收藏
分享
2024-12-29 15:37
已编辑
西华大学 图像识别
程序员牛肉:去不了,大厂算法卡学历吧
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务