• Java学习笔记之集合1


    0x00 概述

    本文涉及Java知识点为集合,包括Collection集合,List集合,数组和队列结构,List集合的实现类

    0x01 Collection集合

    1.1 集合体系结构

    •  集合类的特点

        提供一种存储空间可变的存储模型,存储的数据内容可以随时发生改变

    • 集合类的体系图

    1.2 Collection集合概述和基本使用

    •  Collection集合概述

        是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素

        JDK不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现

    • Collection集合基本使用
    package com.CollectionTest1;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    public class CollectionDemo1 {
        public static void main(String[] args) {
            // 创建Collection集合的对象
            Collection<String> c = new ArrayList<String>();
    
            // 添加元素:boolean add(E e)
            c.add("hello");
            c.add("world");
            c.add("java");
    
            // 输出集合对象
            System.out.println(c);
    
        }
    }

    1.3 Collection集合的常用方法

    1.4 Collection集合的遍历

    • 迭代器的介绍

        迭代器,集合的专用遍历方式

        Iterator iterator(): 返回此集合中元素的迭代器,通过集合的iterator()方法得到

        迭代器是通过集合的iterator()方法得到的,所以他们说它是依赖于集合而存在的

    • Collection集合的遍历
    package com.CollectionTest1;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class IteratorDemo {
        public static void main(String[] args) {
            // 创建集合对象
            Collection<String> c = new ArrayList<>();
    
            // 添加元素
            c.add("hello");
            c.add("world");
            c.add("java");
            c.add("javaee");
    
            // Iterator<E> iterator(): 返回此集合中元素的迭代器,通过集合的Iterator()方法得到
            Iterator<String> it = c.iterator();
    
            // 用while循环改进元素的判断和获取
            while (it.hasNext()) {
                String s = it.next();
                System.out.println(s);
            }
        }
    }

    1.5 集合使用步骤图解

    1.6 集合的案例-Collection集合存储学习

     需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合

    示例

    package com.CollectionTest2;
    
    public class Student {
        private String name;
        private int age;
    
        public Student() {
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    package com.CollectionTest2;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class CollectionDemo2 {
        public static void main(String[] args) {
            // 创建Collection集合对象
            Collection<Student> c = new ArrayList<Student>();
    
            // 创建学生对象
            Student s1 = new Student("Alice", 12);
            Student s2 = new Student("Bob", 13);
            Student s3 = new Student("Charlie", 14);
    
            // 把学生添加到集合
            c.add(s1);
            c.add(s2);
            c.add(s3);
    
            // 遍历集合(迭代器方式)
            Iterator<Student> it = c.iterator();
            while (it.hasNext()) {
                Student s = it.next();
                System.out.println(s.getName() + ", " + s.getAge());
            }
        }
    }

    0x02 List集合

    2.1 List集合概述和特点

    • List集合概述

        有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素

        与Set集合不同,列表通常允许重复的元素

    • List集合特点

        有索引

        可以存储重复元素

        元素存取有序

    2.2 List集合的特有方法

    2.3 集合的案例-List集合存储学生对象并遍历

    需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合

    示例

    package com.ListTest1;
    
    public class Student {
        private String name;
        private int age;
    
        public Student() {
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    package com.ListTest1;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class ListDemo {
        public static void main(String[] args) {
            // 创建List集合对象
            List<Student> list = new ArrayList<Student>();
    
            // 创建学生对象
            Student s1 = new Student("Alice", 13);
            Student s2 = new Student("Bob", 14);
            Student s3 = new Student("Charlie", 13);
    
            // 把学生添加到集合
            list.add(s1);
            list.add(s2);
            list.add(s3);
    
            // 迭代器方式
            Iterator<Student> it = list.iterator();
            while (it.hasNext()) {
                Student s = it.next();
                System.out.println(s.getName() + ", " + s.getAge());
            }
            System.out.println("------------");
    
            for (int i = 0; i < list.size(); i++) {
                Student s = list.get(i);
                System.out.println(s.getName() + ", " + s.getAge());
            }
        }
    }

    2.4 并发修改异常

    • 出现原因

        迭代器遍历的过程中,通过结合对象修改了集合中的元素,造成了迭代器获取元素中判断预期修改值和实际修改值不一致,则会出现ConcurrentModificationException

    • 解决方案

        用for遍历循环,然后用集合对象做对应的操作即可

    示例

    package com.ListDemo1;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class ListDemo {
        public static void main(String[] args) {
            // 创建对象
            List<String> list = new ArrayList<String>();
    
            // 添加元素
            list.add("hello");
            list.add("world");
            list.add("java");
    
            // 遍历集合,得到每一个元素,看有没有"world"这个元素,如果有,就添加一个Javaee,请写代码实现
            /*
            Iterator<String> it = list.iterator();
            while(it.hasNext()) {
                String s = it.next();
                if(s.equals("world")) {
                    list.add("javaee");
                }
            }
    
             */
    
            for (int i = 0; i < list.size(); i++) {
                String s = list.get(i);
                if (s.equals("world")) {
                    list.add("javaee");
                }
            }
        }
    }

    2.5 列表迭代器

    • ListIterator介绍

        通过List集合的listIterator方法得到,所以说它是List集合特有的迭代器

        用于允许程序员沿任一方向遍历的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置

    示例

    package com.ListDemo1;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.ListIterator;
    
    public class ListIteratorDemo {
        public static void main(String[] args) {
            // 创建对象
            List<String> list = new ArrayList<String>();
            
            // 添加元素
            list.add("hello");
            list.add("world");
            list.add("java");
    
            // 获取列表迭代器
            ListIterator<String> lit = list.listIterator();
            while(lit.hasNext()) {
                String s = lit.next();
                if(s.equals("world")) {
                    lit.add("javaee");
                }
            }
            System.out.println(list);
        }
    }

    2.6 增强for循环

    定义格式

    for(元素数据类型 变量名: 数组/集合对象名) {
        循环体;
    }

    示例

    package com.ListDemo1;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class ForDemo {
        public static void main(String[] args) {
            int[] arr = {1, 2, 3, 4};
            for (int i : arr) {
                System.out.print(i);
            }
    
            System.out.println("---------");
    
            String[] strArray = {"hello", "world", "javaee"};
            for (String s : strArray) {
                System.out.println(s);
            }
    
            System.out.println("---------");
    
            List<String> list = new ArrayList<String>();
            list.add("hellp");
            list.add("world");
            list.add("javaee");
    
            for (String s : list) {
                System.out.println(s);
            }
            
            System.out.println("---------");
            
        }
    }

    2.7 集合的案例-List集合存储学生对抗三种方式遍历

     需求:创建一个存储学生对象的合集,存储3个学生对象,使用程序实现在控制台遍历该集合

     示例

    package com.ListDemo2;
    
    public class Student {
        private String name;
        private int age;
    
        public Student() {
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    package com.ListDemo2;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class ListDemo {
        public static void main(String[] args) {
            // 创建List集合对象
            List<Student> list = new ArrayList<Student>();
    
            // 创建学生对象
            Student s1 = new Student("Alice", 13);
            Student s2 = new Student("Bob", 14);
            Student s3 = new Student("Charlie", 14);
    
            // 把学生添加到集合
            list.add(s1);
            list.add(s2);
            list.add(s3);
    
            // 迭代器:集合特有的遍历方式
            Iterator<Student> it = list.iterator();
            while (it.hasNext()) {
                Student s = it.next();
                System.out.println(s.getName() + ", " + s.getAge());
            }
            System.out.println("---------");
    
            // 普通for:带有索引的遍历方式
            for (int i = 0; i < list.size(); i++) {
                Student s = list.get(i);
                System.out.println(s.getName() + ", " + s.getAge());
            }
    
            // 增强for:最方便的遍历方式
            for (Student s : list) {
                System.out.println(s.getName() + ", " + s.getAge());
            }
        }
    }

    0x03 数据结构

    3.1 数据结构之栈和队列

    • 栈结构

        先进后出

    • 队列结构

        先进先出

    3.2 数据结构之数组和链表

    •  数组结构

        查询快,增删满

    • 队列结构

        查询慢,增删快

    0x04 List集合的实现类

    4.1 List集合子类的特点

    •  ArrayList集合

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

    • LinkedList集合

        底层是链表结构实现,查询慢,增删快

    4.2 集合的案例-ArrayList集合存储学生对象三种方式遍历

    package com.ArrayList01;
    
    public class Student {
        private String name;
        private int age;
    
        public Student() {
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    package com.ArrayList01;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    
    public class ArrayListDemo {
        public static void main(String[] args) {
            // 创建ArrayList集合对象
            ArrayList<Student> array = new ArrayList<Student>();
    
            // 创建学生对象
            Student s1 = new Student("Alice", 12);
            Student s2 = new Student("Bob", 13);
            Student s3 = new Student("Charlie", 14);
    
            // 把学生添加到集合
            array.add(s1);
            array.add(s2);
            array.add(s3);
    
            // 迭代器:集合特有的遍历方式
            Iterator<Student> it = array.iterator();
            while (it.hasNext()) {
                Student s = it.next();
                System.out.println(s.getName() + ", " + s.getAge());
            }
            System.out.println("----------");
    
            // 普通for:带有索引的遍历方式
            for (int i = 0; i < array.size(); i++) {
                Student s = array.get(i);
                System.out.println(s.getName() + ", " + s.getAge());
            }
            System.out.println("----------");
    
            // 增强for:最方便的遍历方式
            for (Student s : array) {
                System.out.println(s.getName() + ", " + s.getAge());
            }
        }
    }

    4.3 LinkedList集合的特有功能

     特有方法:

  • 相关阅读:
    校验相关问题
    类型转换和操作符重载 (c#)
    泛型委托Func<string,string>()
    第三次作业 刘惠惠
    刘惠惠1.12
    第二次作业刘惠惠2.6,2.15
    刘惠惠1.8
    第四次作业 刘惠惠
    刘惠惠1.2
    设计模式中的单件模式
  • 原文地址:https://www.cnblogs.com/JetpropelledSnake/p/15655661.html
Copyright © 2020-2023  润新知