zoukankan      html  css  js  c++  java
  • Java中集合

    1.集合

    1.1 集合的由来及集合继承体系图

    *A:集合的由来

    * 数组长度是固定的,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,Java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少

    *B:数组和集合的区别

      * 区别1:

        * 数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值。

        * 集合只能存储引用数据类型(对象)集合中也可以存储基本数据类型,但是在存储的时候会自动装箱变成对象 Integer int Double double

      * 区别2:

        * 数组长度是固定的,不能自动增长

        * 集合的长度是可变的,可以根据元素的增加而增长

    *C:数组和集合什么时候用

      * 1.如果元素个数是固定的,推荐用数组

       * 2.如果元素个数不是固定的,推荐用集合(用处更多)

    *D:集合继承体系图

    1.2 Collection 集合的基本功能测试

    package com.se.test2;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    public class Demo2 {
        public static void main(String[] args) {
    //        demo1();
            Collection c = new ArrayList();
            c.add("a");
            c.add("b");
            c.add("c");
            c.add("d");
            boolean b = c.remove("a");
            System.out.println(b); // true
            System.out.println(c); // [b, c, d]
    //        c.clear(); //清空集合
    //        System.out.println(c); // []
            boolean b1 = c.contains("c"); // 判断集合中是否包含"c"
            System.out.println(b1); // true
            System.out.println(c.isEmpty()); // 判断集合是否为空
            int size = c.size(); // 获取元素个数
            System.out.println(size);
        }
    
        public static void demo1() {
            Collection c = new ArrayList(); //多态,父类引用指向子类对象
            // add(E e)将指定元素添加到列表的尾部
            c.add("abc");
            c.add(true);
            c.add(100);
            c.add("abc");
            c.add(new Student("张三",19));
            c.add(new Student("李四",20));
            System.out.println(c); // 重写了toString()方法
        }
    }

    1.3 集合的遍历之集合转数组遍历

    package com.se.test2;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    public class Demo3 {
        public static void main(String[] args) {
    //        demo();
            Collection c = new ArrayList();
            //Object obj = new Student("天气", 22);
            c.add(new Student("张三", 23));
            c.add(new Student("李四", 21));
            c.add(new Student("王五", 25));
            c.add(new Student("赵六", 26));
            //将集合转为数组
            Object[] arr = c.toArray();
            for (int i = 0; i < arr.length; i++) {
    //            System.out.println(arr[i]);
                //在Student类中没有重写toString()时候,向下转型
                Student s = (Student) arr[i];
                System.out.println(s.getName() + "-----" + s.getAge());
            }
        }
    
        public static void demo() {
            Collection c = new ArrayList();
            c.add(1); // int --> Integer 自动装箱也就是向上转换
            c.add("b");
            c.add("c");
            c.add("d");
    
            //将集合转换成数组,一般不用这种方式
            Object[] arr = c.toArray();
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }

    1.4 Collection 集合的带All功能测试

    package com.se.test2;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    public class Demo4 {
        public static void main(String[] args) {
    //        demo();
    //        demo2();
    //        demo3();
            Collection c1 = new ArrayList();
            c1.add("a");
            c1.add("b");
            c1.add("c");
            c1.add("d");
    
            Collection c2 = new ArrayList();
            c2.add("a");
            c2.add("b");
            c2.add("c");
            c2.add("d");
            c2.add("e");
            // 调用的对象c1中的元素如果改变了就返回true,如果没有改变就返回false
            boolean b = c1.retainAll(c2); // 取交集
            System.out.println(b);
            System.out.println(c1);
        }
    
        public static void demo3() {
            Collection c1 = new ArrayList();
            c1.add("a");
            c1.add("b");
            c1.add("c");
            c1.add("d");
    
            Collection c2 = new ArrayList();
            c2.add("a");
            c2.add("b");
            boolean b = c1.containsAll(c2); // 判断调用的集合是否包含传入的集合
            System.out.println(b);
        }
    
        public static void demo2() {
            Collection c1 = new ArrayList();
            c1.add("a");
            c1.add("b");
            c1.add("c");
            c1.add("d");
    
            Collection c2 = new ArrayList();
            c2.add("e");
            c2.add("f");
            c2.add("a");
            boolean b = c1.removeAll(c2); // 删除的是交集
            System.out.println(b);
            System.out.println(c1);
        }
    
        public static void demo() {
            Collection c1 = new ArrayList();
            c1.add("a");
            c1.add("b");
            c1.add("c");
            c1.add("d");
    
            Collection c2 = new ArrayList();
            c2.add("a");
            c2.add("b");
            c2.add("c");
            c2.add("d");
            c1.addAll(c2);
            //将c2中的每一个元素添加到c1中
            //c1.add(c2);
            //c1.add(c2); // 将c2看成一个对象添加到c1中
            System.out.println(c1);
            System.out.println(c1.size());
        }
    }

    1.5 集合的遍历之迭代器遍历

    package com.se.test2;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class Demo5 {
        public static void main(String[] args) {
    //        demo();
            Collection c = new ArrayList();
            c.add(new Student("张三", 20));
            c.add(new Student("李四", 21));
            c.add(new Student("王五", 22));
            c.add(new Student("赵六", 23));
            //获取迭代器
            Iterator it = c.iterator();
            while (it.hasNext()) {
    //            System.out.println(it.next()); // 为重写toString()方法,打印出来的是地址值;重写toString()后可以输出
                //向下转型
                Student stu = (Student) it.next();
                System.out.println(stu.getName() + "----" + stu.getAge());
            }
            //for循环
    //        for (Iterator it = c.iterator(); it.hasNext();){
    //            System.out.println(it.next());
    //        }
        }
    
        public static void demo() {
            Collection c = new ArrayList();
            c.add("a");
            c.add("b");
            c.add("c");
            c.add("d");
            c.add("e");
            Iterator it = c.iterator();
            while (it.hasNext()) {
                System.out.println(it.next());
            }
        }
    }

    1.6 List 集合存储学生对象并遍历

    package com.se.test2;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.List;
    
    public class Demo6 {
        public static void main(String[] args) {
    //        Collection c = new ArrayList(); // 多态,祖先引用指向子类对象
            List list = new ArrayList();    // 多态,父类引用指向子类对象
            list.add("a");
            list.add("b");
            list.add("c");
            list.add(3,"f");
            list.set(1,"f"); // 把指定位置的元素给修改了
            System.out.println(list);
            Iterator it = list.iterator();
            while (it.hasNext()){
                System.out.println(it.next());
            }
        }
    }

    1.7 并发修改异常产生的原因及解决方法(了解)

    也就是用iterator()迭代器,在遍历集合的同时不能修改集合,不然会引发异常ConcurrentModificationException异常

    package com.se.test2;
    
    import java.util.*;
    
    public class Demo7 {
        /**
         * 需求:我有一个集合
         * 请问,我想判断里面有没有”world“这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
         * contains
         * 1.遍历集合的每一个元素
         * 2.取到每一个元素和world进行对比,如果相等了就把javaee添加到集合中
         * @param args
         */
        public static void main(String[] args) {
    //        Collection c = new ArrayList();
            List list = new ArrayList();
            list.add("a");
            list.add("b");
            list.add("world");
            list.add("d");
    //        Iterator it = list.iterator();
    //        while (it.hasNext()){
    //            String str = (String)it.next();
    //            if (str.equals("world")){
    //                list.add("javaee"); // 遍历集合的同时,你修改集合了,会导致并发异常问题
    //            }
    //        }
            ListIterator lit = list.listIterator();
            while (lit.hasNext()){
                String str = (String) lit.next();
                if (str.equals("world")){
                    // 遍历集合的同时,不使用集合list本身去做修改操作,而是用迭代器lit去修改
                    lit.add("javaee");
                }
            }
            System.out.println(list);
        }
    }

    1.8 ListIterator(了解)

     

    1.9 Vector 的特有功能

    * A:Vector类概述

    * B:Vector类特有功能

      * public void addElement(E obj)

      * public E elementAt(int index)

      * public Enumeration elements()

    1.10 数组结构之数组和链表

    * A:数组

      * 查询快,修改也快

      * 增删慢

    * B:链表

      * 查询慢,修改也慢

      * 增删快

    1.11 List 的三个子类的特点

    * A:List 的三个子类的特点

      ArrayList:

         底层数据结构是数组,查询快,增删慢,有序

        线程不安全,效率高。

      Vector:

        底层数据结构是数组,查询快,增删慢

        线程安全,效率低。

      Vector 相对 ArrayList 查询慢(线程安全的)

      Vector 相对 linkedList 增删慢(数组结构)

      LinkedList:

        底层数据结构是链表,查询慢,增删快。无序

        线程不安全,效率高。

      

      Vector 和 ArrayList 的区别:

        Vector 是线程安全的,效率低

        ArrayList是线程不安全的,效率高

      共同点:都是数组实现的

      ArrayList 和 LinkedList 的区别

        ArrayList 底层是数组结果,查询和修改快

        LinkedList 底层是链表结构的,增和删比较快,查询和修改比较慢

      共同点:都是线程不安全的


    * B: List 有三个儿子,我们到底使用谁呢?

      查询多用ArrayList

      增删多用LinkedList

      如果都多ArrayList

  • 相关阅读:
    【转】大型高性能ASP.NET系统架构设计
    【原创】构建高性能ASP.NET站点 第五章—性能调优综述(后篇)
    表关联键上创建索引的重要性
    NorthScale Memcached Server尝试总结
    转:80后的80条幽默有哲理的语录
    利用AOP重构代码
    Sandcastle Help File Builder
    酒店项目OO设计
    泛型委托在项目中的应用
    SQL CTE能帮助我做什么
  • 原文地址:https://www.cnblogs.com/LEPENGYANG/p/15009011.html
Copyright © 2011-2022 走看看