作者:季沐测试笔记

原文地址https://www.cnblogs.com/testero/p/15228435.html

博客主页https://www.cnblogs.com/testero

1.List集合

1.1List集合概述和特点

  • List集合概述

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

1.2List集合的特有方法

方法名 描述
void add(int index,E element) 在此集合中的指定位置插入指定的元素
E remove(int index) 删除指定索引处的元素,返回被删除的元素
E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
E get(int index) 返回指定索引处的元素

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

  • 案例需求

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

  • 代码实现

    • 学生类

      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;
      }
      }
    • 测试类

      public class ListDemo {
      public static void main(String[] args) {
      //创建List集合对象
      List<Student> list = new ArrayList<Student>(); //创建学生对象
      Student s1 = new Student("林青霞", 30);
      Student s2 = new Student("张曼玉", 35);
      Student s3 = new Student("王祖贤", 33); //把学生添加到集合
      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());
      } }
      }

1.4并发修改异常

  • 出现的原因

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

  • 解决的方案

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

  • 示例代码

    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");
    }
    } //输出集合对象
    System.out.println(list);
    }
    }

1.5列表迭代器

  • ListIterator介绍

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

    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); }
    }

1.6增强for循环

  • 定义格式

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

    public class ForDemo {
    public static void main(String[] args) {
    int[] arr = {1,2,3,4,5};
    for(int i : arr) {
    System.out.println(i);
    } System.out.println("--------"); String[] strArray = {"hello","world","java"};
    for(String s : strArray) {
    System.out.println(s);
    } System.out.println("--------"); List<String> list = new ArrayList<String>();
    list.add("hello");
    list.add("world");
    list.add("java"); for(String s : list) {
    System.out.println(s);
    } System.out.println("--------"); //内部原理是一个Iterator迭代器
    /*
    for(String s : list) {
    if(s.equals("world")) {
    list.add("javaee"); //ConcurrentModificationException
    }
    }
    */
    }
    }

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

  • 案例需求

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

  • 代码实现

    • 学生类

      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;
      }
      }
    • 测试类

      public class ListDemo {
      public static void main(String[] args) {
      //创建List集合对象
      List<Student> list = new ArrayList<Student>(); //创建学生对象
      Student s1 = new Student("林青霞", 30);
      Student s2 = new Student("张曼玉", 35);
      Student s3 = new Student("王祖贤", 33); //把学生添加到集合
      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());
      }
      System.out.println("--------"); //增强for:最方便的遍历方式
      for(Student s : list) {
      System.out.println(s.getName()+","+s.getAge());
      }
      }
      }

2. 数据结构

2.1数据结构之栈和队列

  • 栈结构

    ​ 先进后出

  • 队列结构

    ​ 先进先出

2.2数据结构之数组和链表

  • 数组结构

    ​ 查询快、增删慢

  • 队列结构

    ​ 查询慢、增删快

3. List集合的实现类

3.1List集合子类的特点

  • ArrayList集合

    ​ 底层是数组结构实现,查询快、增删慢

  • LinkedList集合

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

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

  • 案例需求

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

  • 代码实现

    • 学生类

      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;
      }
      }
    • 测试类

      public class ArrayListDemo {
      public static void main(String[] args) {
      //创建ArrayList集合对象
      ArrayList<Student> array = new ArrayList<Student>(); //创建学生对象
      Student s1 = new Student("林青霞", 30);
      Student s2 = new Student("张曼玉", 35);
      Student s3 = new Student("王祖贤", 33); //把学生添加到集合
      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());
      }
      }
      }

3.3LinkedList集合的特有功能

  • 特有方法

    方法名 说明
    public void addFirst(E e) 在该列表开头插入指定的元素
    public void addLast(E e) 将指定的元素追加到此列表的末尾
    public E getFirst() 返回此列表中的第一个元素
    public E getLast() 返回此列表中的最后一个元素
    public E removeFirst() 从此列表中删除并返回第一个元素
    public E removeLast() 从此列表中删除并返回最后一个元素

Java(27)集合二List的更多相关文章

  1. Java之集合(二十六)ConcurrentSkipListMap

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7542578.html 1.前言 一个可伸缩的并发实现,这个map实现了排序功能,默认使用的是对象自身的compa ...

  2. Java之集合(二)ArrayDeque

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7283928.html 1.前言 上章讲解了Java中的集合接口和相关实现抽象类,本章开始介绍一些具体的实现类,第 ...

  3. Java之集合(二十七)其它集合

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7551368.html 1.前言 本章介绍剩余的3个集合类:ConcurrentSkipListSet.CopyO ...

  4. Java之集合(二十四)ConcurrentLinkedDeque

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7517454.html 1.前言 本章介绍并发队列ConcurrentLinkedDeque,这是一个非阻塞,无锁 ...

  5. Java之集合(二十三)SynchronousQueue

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7515729.html 1.前言 本章介绍阻塞队列SynchronousQueue.之前介绍过LinkedTran ...

  6. Java之集合(二十二)PriorityBlockingQueue

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7510799.html 1.前言 本章介绍阻塞队列PriorityBlockingQueue.这是一个无界有序的阻 ...

  7. Java之集合(二十五)ConcurrentHashMap

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7520808.html 1.前言 本章介绍使用的最频繁的并发集合类之一ConcurrentHashMap,之前介绍 ...

  8. Java之集合(二十一)LinkedTransferQueue

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7505355.html 1.前言 本章介绍无界的阻塞队列LinkedTransferQueue,JDK7才提供了这 ...

  9. Java之集合(二十)LinkedBlockingQueue

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7503678.html 1.前言 本章介绍阻塞队列LinkedBlockingQueue,这是一个基于链表的可选长 ...

随机推荐

  1. MySQL高可用主从复制新增slave

    原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 基础环境 二 新增slave2方案 2.1 方案1:-复制主库 2.2 方案2 ...

  2. centos7 wget安装Tomcat7

    2021-07-15 1.环境介绍 操作系统:centos7 jdk版本:jdk1.8.0.211 tomcat版本:tomcat7.0.109 2. 检查系统中是否已经安装 jdk ,如未安装, 请 ...

  3. android kotlin 子线程中调用界面UI组件崩溃

    UI 只能在主线程内更新,子线程需要更新UI组件时可以这样: fun fuck(){ Executors.newSingleThreadExecutor().execute{ // url reque ...

  4. RabbitMQ之消息模式2

    消费端限流 什么是消费端的限流? 假设一个场景,首先,我们RabbitMQ服务器有上万条未处理的消息,我们随便打开一个消费者客户端,会出现下面情况: 巨量的消息瞬间全部推送过来,但是我们单个客户端无法 ...

  5. Pytest 系列(28)- 参数化 parametrize + @allure.title() 动态生成标题

    如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 前言 参数化 @pytest.ma ...

  6. adb 常用命令大全(3)- 查看手机设备信息

    查看手机型号 adb shell getprop ro.product.model 查看电池状况 adb shell dumpsys battery 其中 scale 代表最大电量,level 代表当 ...

  7. python3 爬虫五大模块之五:信息采集器

    Python的爬虫框架主要可以分为以下五个部分: 爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义: URL管理器:负责URL的管理,包括 ...

  8. CSS001. 纯CSS实现瀑布流(纵向排序)

    通过 Multi-columns 相关的属性 column-count.column-gap 配合 break-inside 来实现瀑布流布局. 首先对包裹图片的盒子增加样式,column-count ...

  9. AQS深入分析

    一.node概念 1.当线程获取锁失败时,会被打包成一个node放到同步队列中 2.node属性 当线程获取锁失败时,会被打包成一个node放到同步队列中,所以node属性中有一个thread属性; ...

  10. word文档转成图片

    1:先把word文档转成pdf格式  这个是在word中转成pdf格式,保存好 2:再把pdf格式转成图片 在这个链接中打开https://smallpdf.com/cn/pdf-converter, ...