java学习初探十三之集合Collection常用方法

来源:互联网 发布:网络连接图片 编辑:程序博客网 时间:2024/05/21 09:56

Collection常用方法
(1)

import java.util.ArrayList;import java.util.Collection;/*  boolean add(Object element) 向集合中添加元素 */public class CollectionTest02 {    public static void main(String[] args) {        //1.创建集合        Collection c=new ArrayList<>();        //2.添加元素        c.add(1);        c.add(new Object());//Collection 集合只能单个存储元素,并且只能存储应用类型        Customer cus=new Customer("Jack", 20);        c.add(cus);        //3.获取元素的个数        System.out.println(c.size());//3        System.out.println(c.isEmpty());//是否为空,false        //4.将集合转换成Object类型的数组        Object[] objs=c.toArray();        for(int i=0;i<objs.length;i++) {            System.out.println(objs[i]);        }        //5.清空元素        c.clear();        System.out.println(c.size());//0        System.out.println(c.isEmpty());//是否为空,true    }}class Customer{    String name;    int age;    public Customer(String name,int age) {        this.name=name;        this.age=age;    }    //重写Object中的toString    public String toString() {        return "Customer[name="+name+",age="+age+"]";    }}

(2)Iterator iterator();获取集合所依赖的迭代器对象,通过迭代器中的方法完成集合的迭代(遍历)
注意,这种方法是所有集合通用的遍历方法。

import java.util.Collection;import java.util.Iterator;import java.util.LinkedList;public class CollectionTest03 {    public static void main(String[] args) {        //创建集合对象        Collection c=new LinkedList<>();        //添加元素        c.add(100);        c.add(3.14);        c.add(false);        //迭代,遍历        //1.获取迭代器对象        Iterator it=c.iterator();//迭代器是面向接口编程                                //it是引用,保存了内存地址,指向堆中的“迭代器”对象        System.out.println(it);//java.util.LinkedList$ListItr@15db9742 ListItr是内部类                                //是LinkedList集合所依赖的迭代器        //2.开始调用方法,完成遍历,迭代        while (it.hasNext()) {            System.out.println(it.next());//100  3.14  false            }        /*         * boolean b=it.hasNext();判断是否有更多的元素,如果有,返回true         * Object o=it.next();将迭代器向下移动一位,并且取出指向的元素         *          * 原则:调用it.next()之前,必须调用it.hasNext();         */        for(Iterator it2=c.iterator();it2.hasNext();) {            Object object=it2.next();            System.out.println(object);//100 3.14 false         }    }}

(3)boolean contains(Object o);//判断集合中是否包含某个元素

import java.util.ArrayList;import java.util.Collection;public class CollectionTest04 {    public static void main(String[] args) {        //创建集合        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);        //contains底层调用的是equals方法,如果equals返回true,就是包含        System.out.println(c.contains(i2));//true  Integer这里重写了equals方法,比较的是值        Manager m1=new Manager(100, "Jack");        c.add(m1);        System.out.println(c.contains(m1));//true        Manager m2=new Manager(100, "Jack");        System.out.println(c.contains(m2));//false  Manager没有重写equals,Object中的equals比较的是内存地址,        System.out.println(c.contains(m2));//重写equals后,true。    }}class Manager{    int no;    String name;    Manager(int no,String name){        this.no=no;        this.name=name;    }    //重写equals方法    //需求规定,如果编号和姓名都相同,则表示同一个Manager    public boolean equals(Object o) {        if(this==o) return true;        if(o instanceof Manager) {            Manager m=(Manager)o;            if(m.no==this.no&&m.name.equals(this.name)) {                return true;            }        }        return false;    }}

(4)boolean remove(Object o)
remove和contains方法都需要集合中的元素重写equals方法,因为Object中的equals方法比较内存地址,在现实业务逻辑中不能比较内存地址,该比较内容。

import java.util.ArrayList;import java.util.Collection;public class CollectionTest05 {    public static void main(String[] args) {        // 创建集合对象        Collection c=new ArrayList();        Integer i1=new Integer(10);        //添加元素        c.add(i1);        //删除        Integer i2=new Integer(10);        c.remove(i2);        System.out.println(c.size());//0        Manager m1=new Manager(100, "Smith");        c.add(m1);        Manager m2=new Manager(100, "Smith");        c.remove(m2);        System.out.println(c.size());//0 因为上面我们重写了equals方法    }}

深入remove。
迭代器的remove方法和集合自身的remove方法

import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;public class CollectionTest05 {    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()) {            it.next();//移动指针到下一位            //通过迭代器删除            it.remove();        }        System.out.println(c.size());//0        //下面方式删除会java.util.ConcurrentModificationException异常,        //因为Collection中的remove删除会改变Collection,需要新的迭代器,        while (it.hasNext()) {            Object element=it.next();//移动指针到下一位            //通过迭代器删除            c.remove(element);        }        System.out.println(c.size());    }}
原创粉丝点击