作者:季沐测试笔记

原文地址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. 正整数a、b、c、d满足ab=cd,则a+b+c+d必定为合数。

    正整数a.b.c.d满足ab=cd,则a+b+c+d必定为合数. 证法一:记s=a+b+c+d.如果四个数全为1,s=4,显然是合数.考虑四个数非全1的情形,由对称性,不妨令a>1. 设p是a的 ...

  2. MySQL-基础-2

    MySQL数据库介绍 • MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. • MySQL的历 ...

  3. 【Spring 持久层】Spring 与 Mybatis 整合

    持久层整合总述 1.Spring 框架为什么要与持久层技术进行整合? JavaEE开发需要持久层进行数据库的访问操作 JDBC.Hibernate.MyBatis 进行持久开发过程存在大量的代码冗余 ...

  4. 在同一台计算机中运行多个MySQL服务

    目录 一.问题的来源 二.配置 1. 修改原来MySQL系统的my.ini文件 2. 修改注册表 3. 重新启动服务 4. 最终效果 一.问题的来源 这个学期里我需要修读<数据库系统>的课 ...

  5. Linux基于Docker的Redis主从复制、哨兵模式搭建

    本教程基于CentOS7,开始本教程前,请确保您的Linux系统已安装Docker. 1.使用docker下载redis镜像 docker pull redis 安装完成后,使用docker imag ...

  6. noip模拟44

    A. Emotional Flutter 直接将所有黑块平移到 \([1-k,0]\) 的区间即可,然后找有没有没被覆盖过的整点 注意特判 \(1-k\) 以及 \(0\) 的可行性,考场这里写挂成 ...

  7. 判断input radio选中那个

    var _sex=$("input[name='sex']:checked").val(); if(_sex==null){ layer.msg("请选择性别" ...

  8. io流-缓冲流

    单独去数据时,数据按块读入缓冲区,其后的操作则直接访问缓冲区 但是用 BufferedInputStream读取字节文件时,

  9. io流-文件流\节点流

    FileOutputStream类(jdk1.0) 描述 java.io.FileOutputStream 类是文件字节输出流,用于将数据写入到文件中. 构造方法 //构造方法 FileOutputS ...

  10. mac下secureCRT的使用技巧

    1.设置secureCRT不掉线的方法 Options->Global Options->General->Default Session->Edit Default Sett ...