• 三十一、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>;
     *
     *
     */
  • 相关阅读:
    git小乌龟的使用
    C语言笔记(二):数据类型(基本数据类型)、类型转换(自动转换、强制转换)
    Edge Chromium 中如何始终允许运行 Flash 内容
    【DTOJ】2704:数字互换
    【DTOJ】2703:两个数的余数和商
    【DTOJ】1001:长方形周长和面积
    Linux_simpl shell-利用Shell脚本for循环输出系统中的用户及其Shell
    Linux_Centos7安装VNC实现远程桌面
    Linux_crontab参数表示的意思
    Docke部署nginx并配置nginx
  • 原文地址:https://www.cnblogs.com/chushujin/p/11078761.html
Copyright © 2020-2023  润新知