Day 44

本文探讨了Java中List集合存储学生对象的三种遍历方法,并深入解析了数据结构中的栈、队列、数组和链表。ArrayList和LinkedList作为List集合的子类,其特点被详细阐述,特别是LinkedList的特有功能。
摘要由CSDN通过智能技术生成

_List集合存储学生对象的3种遍历方法

  1. package demo20;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.ListIterator;
    
    /*
        需求:
            用3种方法遍历Student集合
     */
    public class Application {
        public static void main(String[] args) {
            List<Student> l = new ArrayList<>();
    
            // 添加学生对象
            Student s1 = new Student("小明", 9);
            Student s2 = new Student("小红", 10);
            Student s3 = new Student("小君", 7);
    
            // 将学生对象添加到集合中
            l.add(s1);
            l.add(s2);
            l.add(s3);
            System.out.println("--------迭代器遍历--------");
    
            // 迭代器遍历集合
            ListIterator<Student> lit = l.listIterator();
            while (lit.hasNext()) {
                Student s = lit.next();
                System.out.println("姓名:"+s.getName()+" 年龄:"+s.getAge());
            }
            System.out.println("-------for循环遍历-------");
    
            // 采用for循环遍历
            for (int i = 0; i < l.size(); i++) {
                Student s = l.get(i);
                System.out.println("姓名:"+s.getName()+" 年龄:"+s.getAge());
            }
            System.out.println("-------增强for循环遍历------");
    
            // 采用增强for循环遍历
            for ( Student i : l){
                System.out.println("姓名:"+i.getName()+" 年龄:"+i.getAge());
            }
        }
    }
    ------------------------------
    package demo20;
    
    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;
        }
    }
    ===================================
    --------迭代器遍历--------
    姓名:小明 年龄:9
    姓名:小红 年龄:10
    姓名:小君 年龄:7
    -------for循环遍历-------
    姓名:小明 年龄:9
    姓名:小红 年龄:10
    姓名:小君 年龄:7
    -------增强for循环遍历------
    姓名:小明 年龄:9
    姓名:小红 年龄:10
    姓名:小君 年龄:7
    
    Process finished with exit code 0
    

_数据结构之栈和队列

  1. 常见数据结构之栈

    • 数据进入栈模型的过程称为:压/进栈
    • 数据离开栈模型的过程称为:弹/出栈
    • 栈是一种数据先进后出的模型
  2. 常见数据机构值队列

    • 数据从后端进入队列模型的过程称为:入队列
    • 数据从前端离开队列模型的过程称为:出队列
    • 队列是一种先进先出的模型

_数据结构之数组和链表

  1. 常见数据结构之数组:

    • 查询数据通过索引定位,查询任意数据耗时相同,查询效率高
    • 删除数据时,要将原始珊数据删除,痛死后面的每个数据前移,删除效率低
    • 添加数据时,添加位置后的每一个数据后移,再添加元素,添加效率极低
  2. 常见数据结构之链表

    • 链表是一种增删快的模型(对比数组)
    • 链表是一种查询慢的模型(对比数组)

List 集合子类的特点

  1. List子类的特点:

    List集合的常用子类:ArrayList , LinkdeList

    • ArrayList : 底层数据结构是数组,查询快,增删慢;
    • LinkedList: 底层数据结构是链表,查询慢,增删快;
  2. package demo21;
    /*
        需求:
            分别使用ArrayList和LinkedList存储遍历数组
     */
    
    import java.util.ArrayList;
    import java.util.LinkedList;
    
    public class ListDemo_01 {
        public static void main(String[] args) {
            /*
                - ArrayList : 底层数据结构是数组,查询快,增删慢;
                - LinkedList: 底层数据结构是链表,查询慢,增删快;
             */
    
            // ArrayList
            ArrayList<String> al = new ArrayList<>();
            al.add("hello ");
            al.add("world ");
            al.add("java");
    
            //  增强for遍历集合
            for (String s : al) {
                System.out.print(s);
                if (s.equals("java")) {
                    System.out.println();
                }
            }
            System.out.println("---------------");
    
            // LinkedList
            LinkedList<String> ll = new LinkedList<>();
            ll.add("hello ");
            ll.add("world ");
            ll.add("2022");
    
            // 增强for遍历
            for (String s : ll) {
                System.out.print(s);
                if (s.equals("2022")) {
                    System.out.println();
                }
            }
            System.out.println("----------------");
        }
    }
    ===============================
    hello world java
    ---------------
    hello world 2022
    ----------------
    
    Process finished with exit code 0
    

_LinkedList 集合的特有功能

  1. 方法名说明
    public void addFirst(E e)在该列表开头插入指定的元素
    public void addLast(E e)将指定的元素追加到此类表的末尾
    public E getFirst()返回此列表中的第一个元素
    public E getLast()返回此列表中的最后一个元素
    public E removeFirst()从此列表中删除并返回第一个元素
    public E removeLast从此列表中删除并返回最后一个元素
  2. package demo21;
    
    
    import java.util.LinkedList;
    
    public class LinkedListDemo_02 {
        public static void main(String[] args) {
            /*
            public void addFirst(E e)       在该列表开头插入指定的元素
            public void addLast(E e)        将指定的元素追加到此类表的末尾
            public  E getFirst()            返回此列表中的第一个元素
            public E getLast()              返回此列表中的最后一个元素
            public E removeFirst()          从此列表中删除并返回一个元素
            public E removeLast             从此列表中删除并返回最后一个元素
             */
            LinkedList<String> l = new LinkedList<>();
    
            l.add("hello ");
            l.add("world ");
            l.add("java ");
    
            // 遍历集合
            for (String s : l) {
                System.out.print(s);   // hello world java
                if (s.equals("java ")) {
                    System.out.println();
                }
            }
            System.out.println("-------------------");
    
            // public void addFirst(E e)       在该列表开头插入指定的元素
            l.addFirst("hello ");
            for (String s : l) {
                System.out.print(s);    // hello hello world java
                if (s.equals("java ")) {
                    System.out.println();
                }
            }
            System.out.println("------------------");
    
            // public void addLast(E e)        将指定的元素追加到此类表的末尾
            l.addLast("2022");
            for (String s : l) {
                System.out.print(s);   // hello hello world java 2022
                if (s.equals("2022")) {
                    System.out.println();
                }
            }
            System.out.println("---------------");
    
            // public  E getFirst()            返回此列表中的第一个元素
            System.out.println(l.getFirst());  // hello
            System.out.println("----------------");
    
            // public E getLast()              返回此列表中的最后一个元素
            System.out.println(l.getLast());   // 2022
            System.out.println("----------------");
    
            // public E removeFirst()          从此列表中删除并返回第一个元素
            System.out.println(l.removeFirst());  // hello
            for (String s : l) {
                System.out.print(s);   // hello world java 2022
                if (s.equals("2022")) {
                    System.out.println();
                }
            }
            System.out.println("----------------");
    
            // public E removeLast             从此列表中删除并返回最后一个元素
            System.out.println(l.removeLast());  // 2022
            for (String s : l) {
                System.out.print(s);  // hello world java 
                if (s.equals("java ")) {
                    System.out.println();
                }
            }
        }
    }
    ============================
    hello world java 
    -------------------
    hello hello world java 
    ------------------
    hello hello world java 2022
    ---------------
    hello 
    ----------------
    2022
    ----------------
    hello 
    hello world java 2022
    ----------------
    2022
    hello world java 
    
    Process finished with exit code 0
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值