• List接口与实现类


    目录

    一、List接口

    1.特点:

    2.方法:

    二、List接口的使用

    三、List实现类

    1.ArrayList(重点)

    (1)特点

    (2)示例

    (3)源码分析

    2.Vector

    (1)特点

    (2)示例

    3.LinkedList

    (1)特点

    (2)示例

    四、ArrayList和LinkedList的区别

    1.ArrayList     数组

    2.LinkedList    双向链表


    一、List接口

    1.特点:

    有序、有下标、元素可以重复。

    2.方法:

    1.在index位置插入对象o

    void add(int index,Object o)

    2. 将一个集合中的元素添加到此集合中的index位置

    boolean addAll(int index,Collection c)

    3. 返回集合中指定位置的元素

    Object get(int index)

    4. 返回fromIndex和toIndex之间的集合元素

    List subList(int fromIndex,int toIndex)

    二、List接口的使用

    详见代码注解:

    重点都在注释      重点都在注释      重点都在注释      

    ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 

    1. import java.util.ArrayList;
    2. import java.util.Iterator;
    3. import java.util.List;
    4. import java.util.ListIterator;
    5. /**
    6. * List子接口使用
    7. * 特点:1.有序 有下标
    8. * 特点:2.可以重复
    9. */
    10. public class Test03 {
    11. public static void main(String[] args) {
    12. //1.先创建集合对象
    13. List list = new ArrayList<>();
    14. //添加元素
    15. list.add("苹果");
    16. list.add("葡萄");
    17. list.add(20);
    18. list.add(46);
    19. list.add(56);
    20. list.add("香蕉");
    21. list.add("橘子");
    22. list.add(1, "梨子");
    23. System.out.println("元素个数:" + list.size());
    24. System.out.println(list.toString());
    25. System.out.println("----------------");
    26. //2.删除元素(字符串)
    27. list.remove(1);
    28. System.out.println("删除之后的个数:" + list.size());
    29. System.out.println(list.toString());
    30. System.out.println("----------------");
    31. //删除数字
    32. // 直接删除角标
    33. list.remove(2);
    34. System.out.println(list.toString());
    35. System.out.println("----------------");
    36. //转为Object
    37. list.remove((Object) 46);
    38. System.out.println(list.toString());
    39. System.out.println("----------------");
    40. //new Integer
    41. list.remove(new Integer(56));
    42. System.out.println(list.toString());
    43. System.out.println("----------------");
    44. //3.遍历
    45. //(1)有角标,可以使用for循环遍历
    46. for (int i = 0; i < list.size(); i++) {
    47. System.out.println(list.get(i));
    48. }
    49. System.out.println("----------------");
    50. //(2)使用增强for
    51. for (Object objiect : list) {
    52. System.out.println(objiect);
    53. }
    54. System.out.println("----------------");
    55. //(3)使用迭代器 只能往后遍历
    56. Iterator it = list.iterator();
    57. while (it.hasNext()) {
    58. System.out.println(it.next());
    59. }
    60. System.out.println("----------------");
    61. //(4)列表迭代器 可以逆向遍历,任意方向,添加、删除、修改元素
    62. ListIterator lit = list.listIterator();
    63. while (lit.hasNext()) {
    64. System.out.println(lit.nextIndex() + ":" + lit.next()); //从前往后遍历
    65. }
    66. System.out.println("----------------");
    67. while (lit.hasPrevious()) {
    68. System.out.println(lit.previousIndex() + ":" + lit.previous()); //从后往前遍历
    69. }
    70. System.out.println("----------------");
    71. //4.判断
    72. System.out.println(list.contains("苹果"));
    73. System.out.println(list.isEmpty());
    74. System.out.println("----------------");
    75. //5.获取位置
    76. System.out.println(list.indexOf("葡萄"));
    77. System.out.println("----------------");
    78. //6.返回子集合 subList
    79. List list1 = list.subList(1,3); //包含角标1的元素,不包含角标3的元素
    80. System.out.println(list1.toString());
    81. }
    82. }

    三、List实现类

    1.ArrayList(重点)

    (1)特点

    数组结构实现,查询快、增删慢

    运行效率快,线程不安全

    (2)示例

    详见代码注解:

    重点都在注释      重点都在注释      重点都在注释      

    ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 

    1. import com.scaaner.Student;
    2. import java.util.ArrayList;
    3. import java.util.Iterator;
    4. import java.util.ListIterator;
    5. /**
    6. * ArrayList的使用
    7. * 存储结构:数组 查找遍历快 增删慢 比较
    8. */
    9. public class Test01 {
    10. public static void main(String[] args) {
    11. //创建集合
    12. ArrayList arraylist = new ArrayList<>();
    13. //1.添加元素
    14. Student s1 = new Student("A",20);
    15. Student s2 = new Student("B",22);
    16. Student s3 = new Student("C",24);
    17. Student s4 = new Student("D",27);
    18. arraylist.add(new Student("A",20));
    19. arraylist.add(s2);
    20. arraylist.add(s3);
    21. arraylist.add(s4);
    22. System.out.println("元素个数:"+arraylist.size());
    23. System.out.println(arraylist.toString());
    24. System.out.println("------------------------------");
    25. //2.删除元素
    26. arraylist.remove(s1);
    27. System.out.println("删除之后个数:"+arraylist.size());
    28. System.out.println(arraylist.toString());
    29. System.out.println("------------------------------");
    30. //3.遍历元素
    31. //(1)迭代器
    32. Iterator iterator = arraylist.iterator();
    33. while(iterator.hasNext()){
    34. Student s = (Student) iterator.next();
    35. System.out.println(s.toString());
    36. }
    37. System.out.println("------------------------------");
    38. //(2)列表迭代器
    39. ListIterator listIterator = arraylist.listIterator();
    40. while(listIterator.hasNext()){
    41. Student student = (Student) listIterator.next();
    42. System.out.println(student.toString());
    43. }
    44. System.out.println("------------------------------");
    45. while(listIterator.hasPrevious()){
    46. Student student1 = (Student) listIterator.previous();
    47. System.out.println(student1.toString());
    48. }
    49. //4.判断
    50. System.out.println(arraylist.contains(new Student("A",20)));
    51. System.out.println(arraylist.isEmpty());
    52. System.out.println("------------------------------");
    53. //5.查找
    54. System.out.println(arraylist.indexOf(s2));
    55. }
    56. }

    用equals判断两元素是否相等:↓↓↓

    (3)源码分析

    向集合添加元素后,默认容量:DEFAULT_CAPACITY = 10;如果没有添加任何元素,容量为0。

    每次扩容的大小是原来的1.5倍。

    存放元素的数组:elementData

    实际元素个数:size

    添加元素:add()

    2.Vector

    (1)特点

    数组结构实现,查询快、增删慢

    运行效率慢,线程安全

    可实现可增长的对象数组

    (2)示例

    详见代码注解:

    重点都在注释      重点都在注释      重点都在注释      

    ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 

    1. import java.util.Enumeration;
    2. import java.util.Vector;
    3. /**
    4. * Vector集合的使用
    5. * 存储结构:数组
    6. */
    7. public class Test02 {
    8. public static void main(String[] args) {
    9. //创建集合
    10. Vector vector = new Vector<>();
    11. //1.添加元素
    12. vector.add("菠萝");
    13. vector.add("橘子");
    14. vector.add("糯叽叽");
    15. vector.add("芒果");
    16. System.out.println(vector.toString());
    17. System.out.println("-------------------");
    18. //2.删除
    19. vector.remove(1);
    20. //vector.clear(); //清空
    21. System.out.println(vector.toString());
    22. System.out.println("-------------------");
    23. //3.遍历
    24. //可以使用for循环,增强for循环,迭代器
    25. //使用枚举器
    26. Enumeration elements = vector.elements();
    27. while(elements.hasMoreElements()){
    28. String s =(String) elements.nextElement();
    29. System.out.println(s);
    30. }
    31. System.out.println("-------------------");
    32. //4.判断
    33. System.out.println(vector.contains("苹果"));
    34. System.out.println(vector.isEmpty());
    35. System.out.println("-------------------");
    36. //5.其他方法
    37. System.out.println(vector.firstElement()); //枚举第一个元素
    38. System.out.println(vector.lastElement()); //枚举最后一个元素
    39. }
    40. }

    3.LinkedList

    (1)特点

    链表结构实现(双向链表),查询慢、增删快

    (2)示例

    详见代码注解:

    重点都在注释      重点都在注释      重点都在注释      

    ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 

    1. import com.scaaner.Student;
    2. import java.util.Iterator;
    3. import java.util.LinkedList;
    4. import java.util.ListIterator;
    5. /**
    6. * LinkedList的使用
    7. * 存储结构:双向链表
    8. */
    9. public class Test01 {
    10. public static void main(String[] args) {
    11. //创建集合
    12. LinkedList linkedList = new LinkedList<>();
    13. //1.添加元素
    14. Student s1 = new Student("A",20);
    15. Student s2 = new Student("B",22);
    16. Student s3 = new Student("C",24);
    17. Student s4 = new Student("D",27);
    18. linkedList.add(s1);
    19. linkedList.add(s2);
    20. linkedList.add(s3);
    21. linkedList.add(s4);
    22. System.out.println("元素个数:"+linkedList.size());
    23. System.out.println(linkedList.toString());
    24. System.out.println("-----------------------");
    25. //2.删除 remove 清空 clear
    26. //3.遍历
    27. //(1)for
    28. for (int i = 0; i
    29. System.out.println(linkedList.get(i));
    30. }
    31. System.out.println("-----------------------");
    32. //(2)增强for循环
    33. for (Object object : linkedList){
    34. Student s = (Student) object;
    35. System.out.println(s.toString());
    36. }
    37. System.out.println("-----------------------");
    38. //(3)使用迭代器
    39. Iterator iterator =linkedList.iterator();
    40. while(iterator.hasNext()){
    41. Student s = (Student) iterator.next();
    42. System.out.println(s.toString());
    43. }
    44. System.out.println("-----------------------");
    45. //(4)使用列表迭代器
    46. ListIterator listIterator =linkedList.listIterator();
    47. while(iterator.hasNext()){
    48. Student s = (Student) listIterator.next();
    49. System.out.println(s.toString());
    50. }
    51. System.out.println("-----------------------");
    52. //4.判断 contains(是否存在) isEmpty(是否为空)
    53. //5.获取某元素的位置 indexOf()
    54. }
    55. }

    四、ArrayList和LinkedList的区别

    1.ArrayList     数组

     必须开辟连续空间,查询快,增删慢。

    2.LinkedList    双向链表

    无需开辟连续空间,查询慢,增删快。


    简单粗暴!

    感谢ლ(°◕‵ƹ′◕ლ)!!!

  • 相关阅读:
    Java高级特性-泛型方法
    『SpringBoot 源码分析』run() 方法执行流程:(2)刷新应用上下文-准备阶段
    Text-to-SQL小白入门(四)指令进化大模型WizardLM
    【Java】IDEA 将 Java 项目打包成 Jar 包
    什么是算力托管
    如何一键转发朋友圈,快速跟圈?
    梭子鱼替换案例:国产防护甄选CACTER邮件安全网关
    发现广告的是什么?
    第六次面试、第一次复试
    弹性布局 单选
  • 原文地址:https://blog.csdn.net/yao_yaoya/article/details/128018221