zoukankan      html  css  js  c++  java
  • 三十一、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>;
     *
     *
     */
  • 相关阅读:
    MATLAB sort函数用法
    时频分析的一段代码注解
    离散时间信号的傅里叶变换
    两正弦加一噪声信号的频谱分析
    模拟信号的重建
    这10个让你笑的合不拢嘴的GitHub项目,居然拿了7万星
    最新大厂技术面试指南,GitHub10000星
    学习Python总是学了新内容又忘了旧的咋办?
    算法推荐,必读的6本经典神书。
    总计超5万星!GitHub上10个超级好玩的项目
  • 原文地址:https://www.cnblogs.com/chushujin/p/11078761.html
Copyright © 2011-2022 走看看