三十一、Java基础之Collection集合

一、Collection集合

/**
 * Collection基本操作:
 * 1.boolean add(E e):向集合中添加元素e
 * 2.boolean addAll(Collection<? extends E> c):把集合c中所有的元素都添加到当前集合中
 * 3.void clear()清空当前集合中所有的元素
 * 4.boolean contain(Object o):在当前集合中判断是否包含了元素0
 * 5.boolean containAll(Collection<?> c):判断当前集合是否包含集合C中的所有元素
 * 6.boolean isEmpty():判断集合是否为空
 * 7.Iterator<E> iterator():返回当前集合的迭代器
 * 8.boolean remove(Object 0):从当前集合中删除第一个与0匹配的元素
 * 9.boolean removeAll(Collection<?> c):在当前集合中删除在c集合中出现的所有元素
 * 10.int size():返回集合的元素的个数
 * 11.Object[] toArray():把集合转化为数组
 */

二、代码演示

1.Collection接口

import java.util.ArrayList;
import java.util.Collection;
public class Test01 {

    public static void main(String[] args){

        //1、创建Collection集合,Collection是一个接口,需要赋值实现类对象
        Collection collection = new ArrayList<>();

        //2、向集合中添加元素,默认添加Object类型的
        //如果添加基本类型,系统会自动装箱,把包装类对象添加到集合中
        collection.add("aaa");
        collection.add("bbb");
        collection.add(123);
        collection.add(true);


        //3、直接打印,collection引用的是ArrayList对象,ArrayList的爷爷类是AbstractCollection重写了toString()方法
        System.out.println(collection);//[aaa, bbb, 123, true]

        //4、判断
        System.out.println(collection.isEmpty());
        System.out.println(collection.size());
        System.out.println(collection.contains("bbb"));


        //5、删除
        collection.remove("bbb");
        System.out.println(collection);




    }
}
2.一个集合中一般只存储同一类型的数据,可以在定义集合时,通过泛型约束集合中元素的类型
import java.util.ArrayList;
import java.util.Collection;

public class Test02 {

    public static void main(String[] args){

        //1、在实际应用中,一个集合中一般只存储同一类型的数据,可以在定义集合时,通过泛型约束集合中元素的类型
        //Collection后面的尖括弧指定集合元素类型,就是泛型,泛型就是把数据类型当作参数
        Collection<String> collection = new ArrayList<>();

        //添加元素时,collection集合就只能添加String类型的数据
        collection.add("aa");
        collection.add("bb");
        collection.add("cc");
        collection.add("dd");
        //collection.add(123);//Error:(20, 24) java: 不兼容的类型: int无法转换为java.lang.String

        collection.add("cc");
        collection.add("dd");
        System.out.println(collection);//[aa, bb, cc, dd, cc, dd]

        //删除cc,remove()只删除第一个匹配的元素
        collection.remove("cc");
        System.out.println(collection);

        //创建第二个集合
        Collection<String> collection1 = new ArrayList<>();
        collection1.addAll(collection);//把collection中的所有元素添加到当前集合中
        System.out.println(collection1);
        collection1.remove("dd");
        System.out.println(collection1);//[aa, bb, cc, dd]

        //判断colletion集合汇总是否包含collection1集合中所有的元素
        System.out.println(collection.containsAll(collection1));//true
        System.out.println(collection1.containsAll(collection));//true

        //在collection中删除collection1中的所有元素
        collection.removeAll(collection1);
        System.out.println(collection);            //[]





    }
}

3.迭代器

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Test03 {

    public static void main(String[] args){

        //1、创建一个存储String字符串的Collection的集合
        Collection<String> collection = new ArrayList<>();

        //2、添加元素
        collection.add("gg");
        collection.add("jj");
        collection.add("dd");
        collection.add("jj");
        collection.add("dd");
        collection.add("jj");
        collection.add("mm");

        //3、打印
        System.out.println(collection);//[gg, jj, dd, jj, dd, jj, mm]

        //4、遍历
//        for (String str :collection) {
//            System.out.println(str);
//        }

        //5、删除所有的dd
        //collection.remove("dd");//删除第一个匹配的元素

        /*for (String string:collection) {
            if("dd".euqals(string)){
                collection.remove("dd");
            }
        }*/

        //6、迭代器遍历
        //6.1获得迭代器对象
        Iterator<String> iterator = collection.iterator();
        /**
         * iterator.hasNext() 用于判断是够还有下个元素没访问
         * iterator.next()    返回下个元素,游标下移
         * 刚刚获得迭代器时,迭代器的游标指向第一个元素的前面
         */

        while(iterator.hasNext()){
            String string = iterator.next();
            if ("dd".equals(string)){
                iterator.remove();
            }
        }
        System.out.println(collection);


        //7、重新获得迭代器,游标指向第一个元素的前面
        iterator = collection.iterator();

        //获得迭代器后,如果再通过集合的add,remove,clear等方法修改了集合的结构,在迭代时可能会产生异常
        //获得迭代器后,不能再通过集合的add,remove,clear等方法修改了集合的结构
        //可以通过集合的add,remove,clear等方法修改集合的结构后,重新获得迭代器对象
        //collection.add("jj");
        while(iterator.hasNext()){
            String str = iterator.next();
            //System.out.println(str);//java.util.ConcurrentModificationException
            if ("jj".equals(str)){
                //collection.remove("jj");//java.util.ConcurrentModificationException
            }
        }

    }
}

  三、Collections工具类简单介绍

/**
 * java.util.Collections工具类,该工具类有一组方法,synchronizedxx(xxx)可以把xxx
 *  集合转化为县城安全的集合
 *
 *
 *static <T> Collection<T>    synchronizedCollection(Collection<T> c)
 *
 * static <T> List<T>    synchronizedList(List<T> list)
 *
 *
 *static <K,V> Map<K,V>    synchronizedMap(Map<K,V> m)
 *
 *
 *static <T> Set<T>    synchronizedSet(Set<T> s)
 *
 *  但是我们在开发多线程程序时。基本不使用这一组操作,在多线程环境中,如果使用List集合就直接使用java.util.concurrent.CopyOnWriteArrayList<E>类
 *  如果使用Set集合不需要排序,使用java.util.concurrent.CopyOnWriteArraySet<E>;如果需要排序,使用java.util.concurrent.ConcurrentSkipListSet<E>;
 *
 *
 */

 

posted @ 2019-06-24 18:39  旅行没有终点  阅读(279)  评论(0编辑  收藏  举报