• List 接口


    13.3.1 List接口的定义

    public interface List<E> extends Collection<E>
    

    在这里插入图片描述

    13.3.2 List接口的常用子类

    如果要使用List接口进行操作,就必须依靠子类实现对象的实例化操作,而在实际开发中 List 子接口有 ArrayList, Vector 和 LinkedList3 个常用子类。

    1.新的子类:ArrayList

    ArrayList是List子类,可以直接通过对象的多态性为List接口实例化,此类的定义如下:

    public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable
    

    从定义中可以发现ArrayList类继承了 AbstractList类,AbstractList类的定义如下:

    public abstract class AbstractList extends AbstractCollection implements List
    

    (1)实例操作1——向集合中增加元素

    在这里插入图片描述

    【例13.1】验证增加数据的操作

    Collection,List 需要arraylist子类实例化,
    add(e):Collection
    add(index,e):List

    1. package jiaqi;
    2. import java.util.ArrayList;
    3. import java.util.Collection;
    4. import java.util.List;
    5. public class demo458_1 {
    6. public static void main(String[] args)
    7. {
    8. // 因为arraylist是List接口子类,List接口继承Collection
    9. Collection<String> allcollection= new ArrayList<String>();
    10. // 因为arraylist是List接口子类
    11. List<String> alllist = new ArrayList<String>();
    12. alllist.add("list_string_1");//Collection
    13. alllist.add("list_string_2");
    14. alllist.add(0,"list_string_3");//List
    15. System.out.println(alllist);
    16. allcollection.add("collection_string_1");//collection中
    17. allcollection.add("collection_string_2");
    18. System.out.println(allcollection);
    19. alllist.addAll(allcollection);//collection
    20. alllist.addAll(0,allcollection);//list
    21. System.out.println(alllist);
    22. }
    23. }

    从上面程序的运行结果可以发现,使用List中的add(int index,E element)方法可以在集合中的指定位置增加元素,而其他的两个add()方法只是在集合的最后进行内容的追加。

    (2)实例操作2---------- 删除元素

    在这里插入图片描述

    【例13.2】删除对象

    1. package jiaqi;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. public class demo459_1 {
    5. public static void main(String[] args)
    6. {
    7. List<String> alllist = new ArrayList<String>();
    8. alllist.add("string_1");
    9. alllist.add(0,"string_2");
    10. alllist.add("string_3");
    11. alllist.add("string_4");
    12. System.out.println(alllist);
    13. alllist.remove("string_4");//collection
    14. alllist.remove(0);//list
    15. System.out.println(alllist);
    16. }
    17. }

    在这里插入图片描述

    (3)实例操作3——输出List中的内容

    在Collection接口中定义了取得全部数据长度的方法size(),而在List接口中存在了取得集合中指定位置元素的操作get(int index),使用这两个方法就可以将集合中的全部内容进行输出。

    【例13.3】输出全部元素

    for,size,get(i)

    1. package jiaqi;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. public class demo460_1
    5. {
    6. public static void main(String[] args)
    7. {
    8. List<String> allList = new ArrayList<String>();
    9. allList.add("s1");
    10. allList.add("s2");
    11. allList.add("s3");
    12. allList.add("s4");
    13. System.out.println("正序输出:");
    14. for(int i=0;i<allList.size();i++)
    15. {
    16. System.out.print(allList.get(i)+"\t");
    17. }
    18. System.out.println();
    19. System.out.println("逆序输出:");
    20. for(int i=allList.size()-1;i>=0;i--)
    21. {
    22. System.out.print(allList.get(i)+"\t");
    23. }
    24. System.out.println();
    25. }
    26. }

    (4)实例操作4——将集合变为对象数组

    【例13.4】将集合变为对象数组

    在这里插入图片描述
    注意:

    String str[] = allList.toArray(new String[] {});
    
    1. package jiaqi;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. public class demo461_1 {
    5. public static void main(String[] args)
    6. {
    7. // TODO 自动生成的方法存根
    8. List<String> allList = new ArrayList<String>();
    9. allList.add("s1");
    10. allList.add("s2");
    11. allList.add("s3");
    12. //方法1
    13. Object obj[] = allList.toArray();
    14. for(int i=0;i<allList.size();i++)
    15. {
    16. String s = (String) obj[i];
    17. System.out.print(s+"\t");
    18. }
    19. System.out.println();
    20. //方法2
    21. String str[] = allList.toArray(new String[] {});
    22. // String str1[] = new String[10];
    23. for(int i=0;i<allList.size();i++)
    24. {
    25. System.out.print(str[i]+"\t");
    26. }
    27. }
    28. }

    (5)实例操作5——集合的其他相关操作

    在List中还存在截取集合、查找元素位置、判断元素是否存在、集合是否为空等操作。

    【例13.5】测试其他操作

    isEmpty,contains,subList,indexOf
    
    1. package jiaqi;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. public class demo461_2 {
    5. public static void main(String[] args) {
    6. // TODO 自动生成的方法存根
    7. List<String> allList = new ArrayList<String>();
    8. allList.add("s1");
    9. allList.add("s2");
    10. allList.add("s3");
    11. allList.add("s4");
    12. System.out.println(allList);
    13. System.out.println("是否空:"+allList.isEmpty());
    14. System.out.println("是否存在s1:"+allList.contains("s1"));
    15. System.out.println("截取0-3:"+allList.subList(0, 3));
    16. System.out.println("s2的位置:"+allList.indexOf("s2"));
    17. System.out.println("是否空:"+allList.isEmpty());
    18. }
    19. }

    2.挽救的子类:Vector

    在这里插入图片描述

    【例13.6】 Vector子类

    1. package jiaqi;
    2. import java.util.List;
    3. import java.util.Vector;
    4. public class demo462_1 {
    5. public static void main(String[] args) {
    6. // TODO 自动生成的方法存根
    7. List<String> alList = new Vector<String>();
    8. alList.add("s1");
    9. alList.add(0,"s2");
    10. alList.add("s3");
    11. System.out.println(alList);
    12. for(int i=0;i<alList.size();i++)
    13. {
    14. System.out.print(alList.get(i)+"\t");
    15. }
    16. }
    17. }

    在这里插入图片描述

    【例13.7】使用旧的方法

    1. package jiaqi;
    2. import java.util.List;
    3. import java.util.Vector;
    4. public class demo462_1 {
    5. public static void main(String[] args) {
    6. // TODO 自动生成的方法存根
    7. Vector<String> alList = new Vector<String>();
    8. alList.addElement("s1");
    9. alList.addElement("s2");
    10. alList.addElement("s3");
    11. System.out.println(alList);
    12. for(int i=0;i<alList.size();i++)
    13. {
    14. System.out.print(alList.get(i)+"\t");
    15. }
    16. }
    17. }

    3.子类的差异:ArrayList与Vector的区别

    在这里插入图片描述

    4. LinkedList 子类与 Queue 接口

    public class LinkedList extends AbstractSequentialList implements List, Queue, Cloneable, Serializable
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    (1) 实例操作1——在链表的开头和结尾增加数据

    【例13.8】为链表增加数据

    1. package jiaqi;
    2. import java.util.LinkedList;
    3. public class demo465_1 {
    4. public static void main(String[] args) {
    5. // TODO 自动生成的方法存根
    6. LinkedList<String> link = new LinkedList<String>();
    7. link.add("A");
    8. link.add("B");
    9. link.add("C");
    10. System.out.println(link);
    11. link.addFirst("D");
    12. link.addLast("E");
    13. System.out.println(link);
    14. }
    15. }

    (2) 实例操作2——找到链表头

    在这里插入图片描述

    【例13.9】找到表头

    1. package jiaqi;
    2. import java.util.LinkedList;
    3. public class demo465_2 {
    4. public static void main(String[] args) {
    5. // TODO 自动生成的方法存根
    6. LinkedList<String> link = new LinkedList<String>();
    7. link.add("A");
    8. link.add("B");
    9. link.add("C");
    10. link.add("D");
    11. System.out.println("element查找标头:"+link.element());
    12. System.out.println(link);
    13. System.out.println("peek查找标头:"+link.peek());
    14. System.out.println(link);
    15. System.out.println("poll查找标头:"+link.poll());
    16. System.out.println(link);
    17. }
    18. }

    (3)实例操作3——以先进先出的方式取出全部的数据

    【例13.10】以FIFO方式取出内容

    有问题:for(int i=0;i

    有可能是因为:link.pool之后,link.size也在变化

    1. package jiaqi;
    2. import java.util.LinkedList;
    3. public class demo465_2 {
    4. public static void main(String[] args) {
    5. // TODO 自动生成的方法存根
    6. LinkedList<String> link = new LinkedList<String>();
    7. link.add("A");
    8. link.add("B");
    9. link.add("C");
    10. link.add("D");
    11. System.out.println(link.size());
    12. for(int i=0;i<link.size()+3;i++)
    13. {
    14. System.out.print(link.poll());
    15. }
    16. }
    17. }
  • 相关阅读:
    集成经验模态(EEMD)原理详解与python实现
    智慧城管系列-0-项目实战-资料
    Linux信号 signal()编程
    前嗅百科 | 这10个科学常识竟然都不是真的?
    vscode远程连接开发机失败/解决方案大合集
    Pandas缺失值inf与nan处理实践
    Leetcode 454:四数相加II
    视频云存储平台LntonCVS国标视频平台功能和应用场景详细介绍
    考虑源荷不确定性的热电联供微网优化(Matlab代码实现)
    k8s运维管理
  • 原文地址:https://blog.csdn.net/qq_51916951/article/details/126437176