• Java—List


    目录

    2.List

    2.1List集合概述和特点

    2.2List集合特有方法

    2.3并发修改异常

    2.4 Listlterator

    2.5增强for循环

    2.6List集合子类特点

    案例:ArrayList集合存储学生对象用三种方式遍历

     2.7LinkedList集合的特有功能


    2.List

    2.1List集合概述和特点

    List集合概述
            有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素
            与Set集合不同,列表通常允许重复的元素

    List集合特点
    有序:存储和取出的元素顺序一致

    可重复:存储的元素可以重复

    1. package zyy07;
    2. import java.util.ArrayList;
    3. import java.util.Iterator;
    4. import java.util.List;
    5. public class Demo {
    6. public static void main(String[] args) {
    7. //创建集合对象
    8. List l=new ArrayList();
    9. //添加元素
    10. l.add("zyy");
    11. l.add("and");
    12. l.add("jw");
    13. Iterator i= l.iterator();
    14. while(i.hasNext()){
    15. String s=i.next();
    16. System.out.println(s);
    17. }
    18. }
    19. }

    2.2List集合特有方法

    1. package zyy07;
    2. import java.util.ArrayList;
    3. import java.util.Iterator;
    4. import java.util.List;
    5. public class Demo {
    6. public static void main(String[] args) {
    7. //创建集合对象
    8. List l=new ArrayList();
    9. //添加元素
    10. l.add("zyy");
    11. l.add("and");
    12. l.add("jw");
    13. //add在指定位置插入指定元素
    14. l.add(3,"and");
    15. System.out.println(l);
    16. //remove删除指定索引处元素,返回被删除元素
    17. System.out.println(l.remove(3));
    18. //set修改指定索引处元素,返回被修改的元素
    19. System.out.println(l.set(1,"is"));
    20. //get返回指定索引的元素
    21. System.out.println(l.get(2));
    22. System.out.println(l);
    23. //for循环输出
    24. for(int i=0;i
    25. System.out.println(l.get(i));
    26. }
    27. }
    28. }

    2.3并发修改异常

    并发修改异常
            ConcurrentModificationException

    产生原因
            迭代器遍历的过程中,通过集合对象修改了集合中元素的长度,造成了迭代器获取元素中判新预期修改信和实际修改值不一致

    解决方案
            用for循环谝历,然后用集合对象做对应的操作即可

    2.4 Listlterator

    Listlterator:列表迭代器
            通过List集合的listlterator0方法得到,所以说它是List集合特有的选代器
            用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置

    Listlterator中的常用方法
            Enext():返回迭代中的下一个元素
            boolean hasNext():如果迭代具有更多元素,则返回true Eprevious):返回列表中的上一个元素
            boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回true

            void add(E e):将指定的元素插入列表 

    1. package zyy07;
    2. import java.util.ArrayList;
    3. import java.util.Iterator;
    4. import java.util.List;
    5. import java.util.ListIterator;
    6. public class Demo {
    7. public static void main(String[] args) {
    8. //创建集合对象
    9. List l=new ArrayList();
    10. //添加元素
    11. l.add("zyy");
    12. l.add("and");
    13. l.add("jw");
    14. //listIterator
    15. ListIterator li=l.listIterator();
    16. while(li.hasNext()){
    17. System.out.println(li.next());
    18. }
    19. System.out.println("************");
    20. while(li.hasPrevious()){
    21. System.out.println(li.previous());
    22. }
    23. }
    24. }

    2.5增强for循环

    增强for:简化数组和Collection集合的遍历
            实现lterable接口的类允许其对象成为增强型for语句的目标

            它是JDK5之后出现的,其内部原理是一个Iterator迭代器

    增强for的格式
            格式:
            for(元素数据类型变量名:数组或者Collection集合){
                    //在此处使用变量即可,该变量就是元素

            }

            范例:
            int[]arr ={1,2,3,4,5}; for(int i:arr){
                    System.out.println(i);

            }

    1. package zyy07;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. public class Demo {
    5. public static void main(String[] args) {
    6. int[] arr={1,2,3,4,5};
    7. for(int i:arr){
    8. System.out.println(i);
    9. }
    10. System.out.println("************");
    11. String[] str={"zyy","hwj","jwei"};
    12. for(String s:str){
    13. System.out.println(s);
    14. }
    15. System.out.println("*************");
    16. List l=new ArrayList();
    17. l.add("zyy");
    18. l.add("and");
    19. l.add("jwei");
    20. for(String s: l){
    21. System.out.println(s);
    22. }
    23. //内部时Iterator迭代器
    24. for(String s: l){
    25. if(s.equals("zyy")){
    26. l.add("zy");
    27. //ConcurrentModificationException抛出了并发修改异常
    28. //说明它的内部是一个Iterator迭代器
    29. }
    30. }
    31. }
    32. }

    2.6List集合子类特点

    List集合常用子类:ArrayList,LinkedList
            ArrayList:底层数据结构是数组,查询快,增删慢

            LinkedList:底层数据结构是链表,查询慢,增删快

    练习:分别使用ArrayList和LinkedList完成存储字符串并遍历

    1. package zyy07;
    2. import java.util.ArrayList;
    3. import java.util.LinkedList;
    4. import java.util.List;
    5. public class Demo {
    6. public static void main(String[] args) {
    7. ArrayList a=new ArrayList<>();
    8. a.add("zyy");
    9. a.add("and");
    10. a.add("jw");
    11. for(String s: a){
    12. System.out.println(s);
    13. }
    14. LinkedList l=new LinkedList<>();
    15. l.add("jw");
    16. l.add("and");
    17. l.add("zyy");
    18. for(String s:l){
    19. System.out.println(s);
    20. }
    21. }
    22. }

    案例:ArrayList集合存储学生对象用三种方式遍历

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

    思路:
            定义学生类
            创建ArrayList集合对象

            创建学生对象
            把学生添加到集合

            遍历集合
                    迭代器:集合特有的遍历方式

                    普通for:带有索引的遍历方式

                    增强for:最方便的遍历方式

    学生类:

    1. package com.test;
    2. public class student {
    3. //成员变量
    4. private String name;
    5. private int age;
    6. //构造方法
    7. public student(){
    8. }
    9. public student(String name,int age){
    10. this.name=name;
    11. this.age=age;
    12. }
    13. //成员方法
    14. public void setName(String name){
    15. this.name=name;
    16. }
    17. public String getName(){
    18. return name;
    19. }
    20. public void setAge(int age){
    21. this.age=age;
    22. }
    23. public int getAge(){
    24. return age;
    25. }
    26. }
    27. }

    测试类: 

    1. package com.test;
    2. import java.util.ArrayList;
    3. import java.util.Iterator;
    4. public class studentdemo {
    5. public static void main(String[] args) {
    6. //创建对象
    7. ArrayList a=new ArrayList<>();
    8. //创建学生对象
    9. student s1=new student("zyy",14);
    10. student s2=new student("jwei",18);
    11. student s3=new student("hwj",14);
    12. //把学生添加到集合
    13. a.add(s1);
    14. a.add(s2);
    15. a.add(s3);
    16. //迭代器
    17. Iterator i=a.iterator();
    18. while(i.hasNext()){
    19. student s=i.next();
    20. System.out.println(s.getName()+","+s.getAge());
    21. }
    22. System.out.println("***********");
    23. //普通for
    24. for(int j=0;j
    25. student s=a.get(j);
    26. System.out.println(s.getName()+","+s.getAge());
    27. }
    28. System.out.println("*************");
    29. //增强for
    30. for(student s: a){
    31. System.out.println(s.getName()+","+s.getAge());
    32. }
    33. }
    34. }

     2.7LinkedList集合的特有功能

    1. package zyy07;
    2. import java.util.LinkedList;
    3. public class Demo {
    4. public static void main(String[] args) {
    5. LinkedList l=new LinkedList<>();
    6. l.add("jw");
    7. l.add("and");
    8. l.add("zyy");
    9. l.addFirst("i");
    10. l.addLast("you");
    11. System.out.println(l.getFirst());
    12. System.out.println(l.getLast());
    13. System.out.println(l.removeFirst());
    14. System.out.println(l.removeLast());
    15. }
    16. }
  • 相关阅读:
    技术大佬们都是怎么学习的?
    tcp三次握手的一些疑问
    Linux 系统添加虚拟内存的方法
    软件构造 | Equality in ADT and OOP
    ChinaSkills全国职业院校技能大赛Debian样题六||本专栏基于此试题,订阅前必读!!!
    「引流工具」火炬多平台多功能引流高效推广脚本,抖音+快手+小红书多平台自动引流软件
    第八章 防火墙技术与原理运用
    JS,BOM试题,在实践中应用,非常详细!!
    CJC8988带2个立体声耳机驱动器的低功率立体声编解码器
    超级累的 win11,蓝屏,用户不存在要注消,程序图标异常,重装系统
  • 原文地址:https://blog.csdn.net/qq_62799214/article/details/126175545