作者:季沐测试笔记

原文地址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. nginx简介,使用

    nginx是什么 nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件. 支持高并发,能支持几万并发连接 资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M 可 ...

  2. Python之pytesseract模块-实现OCR

    在给PC端应用做自动化测试时,某些情况下无法定位界面上的控件,但我们又想获得界面上的文字,则可以通过截图后从图片上去获取该文字信息.那么,Python中有没有对应的工具来实现OCR呢?答案是有的,它叫 ...

  3. 洛谷P1314 聪明的质监员 题解

    题目 聪明的质监员 题解 这道题和之前Sabotage G的那道题类似,都是用二分答案求解(这道题还要简单一些,不需要用数学推导二分条件,只需简单判断一下即可). 同时为了降低复杂度,肯定不能用暴力求 ...

  4. Linu常用日志分析实战

    日志结构分析 分析日志状态码所在位置为第九个 遍历取出第一行日志的每个字段 //取出第一行日志 awk 'NR==1{for(i=1;i<=NF;i++)print i"= " ...

  5. Redis——set,hash与列表

    一.List列表 基于Linked List实现 元素是字符串类型 列表头尾增删快,中间增删慢,增删元素是常态 元素可以重复出现 最多包含2^32-1元素 列表的索引 从左至右,从0开始 从右至左,从 ...

  6. 线程调用BeginInvoke

    线程异步调用 Thread objThread = new Thread(new ThreadStart(delegate             {                 Dispatch ...

  7. 珠峰2016,第9期 vue.js 笔记部份

    在珠峰参加培训好年了,笔记原是记在本子上,现在也经不需要看了,搬家不想带上书和本了,所以把笔记整理下,存在博客中,也顺便复习一下 安装vue.js 因为方便打包和环境依赖,所以建意npm  init  ...

  8. 迷宫2----BFS

    题目 :蒜头君在你的帮助下终于逃出了迷宫,但是蒜头君并没有沉浸于喜悦之中,而是很快的又陷入了思考,从这个迷宫逃出的最少步数是多少呢?输入格式第一行输入两个整数 n 和 m,表示这是一个 n×m 的迷宫 ...

  9. Java基础系列(41)- 冒泡排序

    冒泡排序 冒泡排序无疑是最为出名的排序算法之一,总共有八大排序 冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较,江湖中人人尽皆知 我们看到的嵌套循环,应该立马就可以得出这个算法的时间复 ...

  10. 停止:service jenkins stop,提示:Failed to stop jenkins.service: Unit jenkins.service not loaded.

    uni@uni-virtual-machine:~$ service jenkins stop Failed to stop jenkins.service: Unit jenkins.service ...