每日一练代码训练-12-01(1)

 对Collection接口常用方法的训练

public class Main {
    public static void main(String[] args) {
        //Collection接口详解
        //常用的方法
        /*boolean add(E e)
        * 确保此集合包含指定的元素(可选操作)
        * */
        /*
        * int size()
        * 返回此集合中的元素数
        * */
        /*
        * void clear()
        * 从此集合中删除所有元素,(可选操作)
        *
        * Object[] toArray()
        * 返回一个包含此集合中所有元素的数组
        *
        * boolean isEmpty()
        * 如果此集合不包含元素,则返回true
        *
        * Itertor iterator()
        * 返回此集合中的元素的迭代器
        * 通过迭代器中方法完成集合的迭代(遍历)
        * */

        class Customer{
            String name;
            int age;
            //构造方法,初始化变量
            Customer(String name,int age){
                this.name = name;
                this.age = age;
            }
            //toString返回字符串
            public String toString(){
                return "Customer[name = "+name+"age="+age+"]";
            }
        }

        //1.创建集合
        Collection c = new ArrayList();
        //2.添加元素
        c.add(1);
        c.add(new Integer(100));
        Object o = new Object();
        c.add(o);//Collection集合只能单个存储元素
        Customer cust = new Customer("张三",20);
        c.add(cust);

        //3.将集合转换成Object类型数组
        Object[] objs = c.toArray();
        //遍历数组
        for(int i=0;i< objs.length;i++){
            System.out.println(objs[i]);
        }
        //4.获取元素的个数
        System.out.println(c.size());//4
        System.out.println(c.isEmpty());//FALSE

        //5.清空元素
        c.clear();
        System.out.println(c.size());//0
        System.out.println(c.isEmpty());//TRUE
    }
}

迭代器的使用

public class Main {
    public static void main(String[] args) {
       //创建对象
        Collection<Comparable> c = new LinkedList<Comparable>();
        //添加元素
        c.add(10);
        c.add(3.14);
        c.add(true);
        //迭代元素
        //1.获取迭代对象
        Iterator<Comparable> it = c.iterator();
        System.out.println(it);
        /*
        * java.util.AbstractList$Itr是ArrayList集合所依赖的迭代器
        * java.util.LinkedList$ListItr是ListedList集合所依赖的迭代器
        * Itr、ListItr是内部类
        * 迭代器是面向接口编程,it是引用,保存了内存地址,指向堆中的”迭代器对象“
        * */

        //2.遍历集合调用Collection内部方法
        while(it.hasNext()){
            Object element = it.next();
            System.out.println(element);
        }
        /*
        * boolean b = it.hasNext();判断是否有更多的元素
        * Object element = it.next();将迭代器下移一位,并且取出指向的元素
        * 原则:it.next()之前必须先调用it.hasNext()方法,防止出现空指针异常
        * */

        /*
        * for(Iterator<Comparable> it1 = c.iterator();it.hasNext();){
        *       Object element1 = it.next();
        *       System.out.println(element1);
        * }
        * */
    }
}

 contains和remove的用法,但是有一个和题目不一样,remove(i2)返回的是false

package web;

import java.util.*;

public class Main {
    public static void main(String[] args) {
        /*boolean contains(Object o)
        如果此集合包含指定的元素,则返回 true 。

        boolean remove(Object o)
        从该集合中删除指定元素的单个实例(如果存在)(可选操作)。

        存储在集合中的元素应该去重写equals方法*/
        //创建集合
        Collection c = new ArrayList();

        //创建Integer类型的对象
        Integer i1 = new Integer(10);

        //添加对象到集合中
        c.add(i1);

        //判断集合中是否包含对象i1
        System.out.println(c.contains(i1));//true

        //再创建一个Integer对象
        Integer i2 = new Integer(10);

        //删除
        c.remove(i2);
        System.out.println(c.size());//0

        //判断集合中是否包含对象i2
        System.out.println(c.contains(i2));//true
        //实际上这里返回的是false
        //这就涉及到之前学的整型常量池,所以i1就是i2
        //并且contains方法底层调用的是equals方法

        //创建Manager对象
        Manager m1 = new Manager(10,"张三");
//        m1.setAge(18);
//        m1.setName("张三");
        //添加对象
        c.add(m1);

        //判断集合中是否存在对象m1
        System.out.println(c.contains(m1));//true

        //再添加一个manager对象
        Manager m2 = new Manager(10,"张三");
//        m2.setAge(18);
//        m2.setName("张三");

        //判断集合中是否存在对象m2
        System.out.println(c.contains(m2));//true

        //删除
        c.remove(m2);
        System.out.println(c.size());//0

        //重写equals方法之前
        //System.out.println(c.contains(m2));false

        //重写equals方法之后
        //System.out.println(c.contains(m2));false
    }
}
class Manager{
    int age;
    String name;
    Manager(int age,String name){
        this.age = age;
        this.name = name;
    }
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    //重写equals方法
    public boolean equals(Object o){
        if(this == o) return true;
        if (o instanceof  Manager){
            Manager m = (Manager) o;
            if (m.age == this.age && m.name.equals(this.name)){
                return true;
            }
        }
        return false;
    }
}

 1.迭代器的remove方法

2.集合本身的remove方法

注意:使用集合本身的remove方法运行会报错,代码没有错,查了资料是什么空指针问题,看不懂

package web;

import java.util.*;

public class Main {
    public static void main(String[] args) {
        //创建一个集合
        Collection c = new ArrayList();

        //添加元素
        c.add(1);
        c.add(2);
        c.add(3);

        //获取迭代器遍历
        Iterator it = c.iterator();
        while (it.hasNext()) {
            //推荐使用迭代器自身的remove方法
            it.next();
            //删除
            it.remove();
            /*
             * 使用集合本身的remove方法删除
             *
             * Object element = it.next();
             *
             * //删除
             * c.remove(element);
             *
             * 这样方式需要在每一次删除后重新获取新的迭代器
             *
             * */
            }
            System.out.println(c.size());//0
        }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值