通用Collection_ArrayList迭代器常用方法

本文介绍了如何创建和操作Java中的Student类实例,展示了如何使用ArrayList进行元素添加、去除重复、迭代遍历以及各种集合操作,如contains、equals、remove、isEmpty和size等。
package demo.assemble;

import java.util.*;

class Student {
    private String name = "hh";
    private int age = 18;

    Student() {
    }

    Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {//如果传入同一个对象
            return true;
        }
        if (!(obj instanceof Student)) {//如果传入类型不是Student
            return false;
        }
        Student p = (Student) obj;
        if (this.name.equals(p.name) && this.age == p.age) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public String toString() {
        return "名字:" + name + "年龄:" + age;
    }

    String getName() {
        return name;
    }

    void setName(String name) {
        this.name = name;
    }

    int getAge() {
        return age;
    }
}

class ArrayListTest {
    public static void main(String[] args) {
        Collection coll = new ArrayList();//ArrayList不同步        //Collection集合根类
        coll.add("abc1");
        coll.add("abc2");
        coll.add(true);
        Student s1 = new Student("a", 1);
        Student s2 = new Student("a", 1);
        coll.add(s1);
        coll.add(s2);
        //s.setName("xxxxxxxxxxxxxxxxx");//集合中储存的是引用,当外面对象发生修改时,集合也发生修改
        //show(coll);//单一操作    是否包含指定元素contains、删除指定元素remove、是否为空isEmpty、集合长度size
        //showAll(coll);//All操作 集合与集合间的操作∪、∩、含于
        iteratorDemo(coll);//迭代器遍历(迭代器是内部类实现的)
        //showList();//List特有方法  指定位置插入add、删除remove、修改set、获取get、切割subList,listIterator迭代器可添加add、修改set

        //coll = getSingleElement(coll);
        //System.out.println("剔除重复元素后:" + coll);
    }

    //剔除集合中重复元素
    private static Collection getSingleElement(Collection coll) {
        System.out.println("初始化ArrayList:" + coll);
        //须知:
        System.out.println("是否含有指定对象:" + coll.contains(new Student("a", 1)));//通过对象的equals()判断
        coll.remove(new Student("a", 1));//再删除。通过对象的equals删除
        System.out.println("删除后:" + coll);

        coll.add(new Student("a", 1));
        coll.add(new Student("a", 1));
        System.out.println("包含重复元素:" + coll);

        Iterator it = coll.iterator();
        ArrayList list = new ArrayList();//用于存放coll中不重复元素
        while (it.hasNext()) {
            Object o = it.next();
            if (!list.contains(o)) {//如果新的数组列表没有it.nexd(),就加入数组
                list.add(o);
            }
        }
        return list;
    }

    //List特有方法  指定位置插入add、删除remove、修改set、获取get、切割subList,listIterator迭代器可添加add、修改set
    private static void showList() {
        List list = new ArrayList();
        list.add("abc1");
        list.add("abc2");
        list.add(0, "abc0");
        System.out.println("指定位置插入元素:" + list);//可选操作
        System.out.println(list + "__删除指定下标元素(返回该元素):" + list.remove(0));//可选操作(自右至左执行)
        System.out.println("删除指定下标元素后:" + list);
        System.out.println("修改指定下标元素:" + list.set(0, "abc11"));//abc1   //可选操作
        System.out.println("修改指定下标元素:" + list);//[abc11, abc2]
        System.out.println("获取指定下标元素:" + list.get(0));//abc11   //越界抛异常IndexOutOfBoundsException
        System.out.println("获取子列表:" + list.subList(1, 2));//abc2    [ )
        //subList 返回的是  ArrayList 的内部类  SubList ,并不是  ArrayList ,而是
        //ArrayList 的一个视图,对于 SubList 子列表的所有操作最终会反映到原列表上。
        System.out.println(list);

        ListIterator it = list.listIterator();//listIterator列表迭代器(迭代器升级!可进行添加,修改操作)
        //正向遍历
        while (it.hasNext()) {//遍历list,如果有abc2,则改为abc22
            Object o = it.next();
            if (o.equals("abc2")) {
                it.set("abc22");//用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。
                it.add("iiiiiii");//并在后面添加一个元素
            }
        }
        System.out.println("遍历修改后:" + list);

        System.out.println("反向迭代器(必须先进行正向迭代):");
        while (it.hasPrevious()) {
            System.out.println(it.previous());
        }
    }

    //迭代器遍历
    private static void iteratorDemo(Collection coll) {
        Iterator it = coll.iterator();
        for (int i = 0; i < coll.size(); i++) {//根据size遍历
            //    System.out.println(it.next());
        }
        System.out.println("删除前:");
        while (it.hasNext()) {//根据下一个有无元素进行遍历   //如果仍有元素可以迭代,则返回 true。
            System.out.println(it.next());
        }
        for (Iterator it2 = coll.iterator(); it2.hasNext(); ) {//临时遍历
            //不允许并发修改(迭代器和集合同时操作),因为迭代器只获取了一次,集合中添加元素后,迭代器并不知道
            Object o = it2.next();
            //解决方案:coll.remove(),coll.add后break,或者,it2.remove()
            if ("abc2".equals(o)) {
                // coll.remove("abc2");
                //coll.add("zzz");
                //it2.remove();//不需要break
                break;
            }
        }//即,不能影响迭代器迭代,或者干脆不迭代
        System.out.println("删除后:");
        for (Object o : coll) {
            System.out.println(o);
        }
/*
        //根据对象遍历
        for (Iterator it = coll.iterator(); it.hasNext(); ) {
            Object o = it.next();
            if (o instanceof Student) {
                Student s = (Student) o;
                System.out.println(s.getName() + "---" + s.getAge());
            } else if (o instanceof String) {
                System.out.println(o);
            }//...
        }*/
    }

    //All操作 集合与集合间的操作∪、∩、含于
    private static void showAll(Collection coll) {
        Collection coll2 = new ArrayList();
        coll2.add("abc1");
        coll2.add(false);
        System.out.println("coll2:" + coll2);
        System.out.println("coll是否包含coll2内所有元素:" + coll.containsAll(coll2));
        //System.out.println("移除coll中包含coll2的元素(取差集):" + coll.removeAll(coll2));//可选操作(不包含则不删)
        //System.out.println("移除后coll:" + coll);

        System.out.println("仅保留coll中包含coll2的元素(取∩):" + coll.retainAll(coll2));//可选操作
        System.out.println("保留后:" + coll);
        System.out.println("添加全部coll2中的元素到coll,包括重复元素(取∪):" + coll.addAll(coll2));//可选操作
        System.out.println("添加全部后" + coll);
        System.out.println("All操作结束:" + coll);
    }

    //单一操作  是否包含指定元素contains、删除指定元素remove、是否为空isEmpty、集合长度size
    private static void show(Collection coll) {
        System.out.println(coll);
        System.out.println("判断是否包含指定元素:\"abc1\":" + coll.contains("abc1"));
        System.out.println("判断与指定元素是否相等:\"abc1\":" + coll.equals("abc1"));
        System.out.println("是否为空:" + coll.isEmpty());
        System.out.println("删除true:" + coll.remove("true"));//若无该元素,则return false   //可选操作
        System.out.println("删除后:" + coll);//成功删除应不加"..."
        System.out.println("集合长度:" + coll.size());
        System.out.println("单一操作结束:" + coll);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值