• Collection集合


    集合概述

    • 集合是Java中提供的一种容器,可以用来存储多个数据
    • 集合和数组既然都是容器,它们有什么区别呢?
      • 数组的长度是固定的,集合的长度可变的。
      • 数组中存储的是同一个类型的元素,可以存储基本数据类型值。集合存储的都是对象,而且对象的类型可以不一致,在开发中一般当对象多的时候,使用集合进行存储。

    集合框架

    接口
    Collection
    (顶层-->底层)
    List
    (有序集合)
    ArrayList
    LinkedList
    Vector
    Set
    (无序集合、
    不可存放重复数)
    HashSet LinkedHashSet
    TreeSet

    迭代器的使用:

    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    /*
    * java.util.Iterator接口:迭代器(对集合进行遍历)
    * 有两个常用的方法
    *   boolean hasNext() 如果有元素可以迭代,则返回true
    *                   判断集合没有下一个元素时,就返回false
    *   E next() 返回迭代的下一个元素
    *            取出集合中的下一个元素
    *   Iterator迭代器是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,
    *   获取实现类的方式比较特殊。
    *   Collection接口中有一个方法,叫iterator(),这个方法返回的就是迭代器的实现类对象
    *   迭代器的使用步骤:
    *     1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
    *     2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
    *     3.使用Iterator接口中的方法next取出集合中的下一个元素
    *
    * */
    public class demo03Iterator {
        public static void main(String[] args) {
            //创建一个集合对象
            Collection<String> coll = new ArrayList<>();
            //往集合中添加元素
            coll.add("姚明");
            coll.add("科比");
            coll.add("麦迪");
            coll.add("詹姆斯");
            coll.add("艾弗森");
            /*
            * 注意:Iterator<E> 接口也是有泛型的,迭代器的泛型跟着集合走,
            * 集合是什么泛型,迭代器就是是泛型
            * */
            Iterator<String> it = coll.iterator();
            //使用hasNext判断是否还有下一个元素
            boolean b = it.hasNext();
            System.out.println(b);
            //使用next取出集合中的下一个元素
            String s = it.next();
            System.out.println(s);
            //未知循环使用while  已知循环使用for
            while (it.hasNext()){
                s = it.next();
                System.out.println(s);
            }
    
        }
    }
    

    package cn.itcast.demo04;

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

    public class generic {
    public static void main(String[] args) {
    show02();

    }
    
     /*
    * 创建集合对象,不使用泛型
    * 好处:默认的类型就是object,可以存储任意类型的数据
    * 弊端:不安全,会引发异常
    * */
    private static  void show01() {
        ArrayList list = new ArrayList<>();
        list.add("abc");
        list.add(1);
        //使用迭代获取 第一步要先获取迭代器
        Iterator it = list.iterator();
        while (it.hasNext()) {
            Object obj = it.next();
            System.out.println(obj);
            /*
            * 想要使用String类型特有的方法,length获取字符串长度,
            * 不能使用 多态 Object obj = “abc” 需要向下转型
            * 此时会出现类型转换异常,不能把Integer 转成 String
            * */
            String s = (String) obj;
            System.out.println(s.length());
        }
    }
    
    /*
    * 创建结汇对象,使用泛型
    * 好处:
    *  1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
    *  2.把运行期异常(代码运行之后会抛出的异常,提升到了编译期),写代码的时候会报错
    *  弊端:
    *   泛型是什么类型,只能存储什么类型
    * */
    private static  void show02(){
        ArrayList<String> list = new ArrayList<>();
        list.add("abc");
        //使用迭代获取 第一步要先获取迭代器
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            String s = it.next();
            System.out.println(s.length());
        }
    }
    

    }

    通配符的使用:

     
        import java.util.ArrayList;
        import java.util.Iterator;
        
        /*
        * 泛型的通配符:
        *    ? 代表任意的数据类型
        * 使用方式:
        *    不能创建对象使用
        *    只能作为方法的参数使用
        * */
        public class generic02 {
            public static void main(String[] args) {
                ArrayList<Integer> list01 = new ArrayList<>();
                list01.add(1);
                list01.add(2);
        //        System.out.println(list01);
        
                ArrayList<String> list02 = new ArrayList<>();
                list02.add("a");
                list02.add("b");
        
                printArray(list01);
                printArray(list02);
            }
            /*
            * 定义一个方法,能遍历所有类型的ArrayList集合
            * 这时候我们不知道ArrayList集合使用什么数据类型,可以使用泛型通配符
            * */
            public static void  printArray(ArrayList<?> list){
                Iterator<?> it = list.iterator();
                while (it.hasNext()){
                    //it.next()方法,取出的元素时Object
                    //因为只有Object才可以接收所有的类型
                    Object o = it.next();
                    System.out.println(o);
                }
            }
        }
       
    
  • 相关阅读:
    HTTP状态码的详细解释,供参考
    js中实现页面跳转(返回前一页、后一页)
    CRUD工程师——基础容器LinkedList
    CRUD工程师——基础容器ArrayList
    Servlet入门
    Linux
    flex弹性布局
    div布局
    递归函数
    运算符
  • 原文地址:https://www.cnblogs.com/Shuangyi/p/10926428.html
Copyright © 2020-2023  润新知