list集合

List集合

List集合的概述

  • 有序集合(也称之为序列),用户可以精确的控制列表中的每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素

  • 与 Set 集合不同,列表通常允许重复的元素

  • List 集合的特点

    • 有序:存储和读取的元素顺序一致

    • 可重复:存储的元素可以重复

demo:

List集合中的常用方法

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

add和remove方法

demo:

java 复制代码
package demo02;

import java.util.ArrayList;
import java.util.List;
/**
 * @Classname : demo02
 * @Description : TODO List集合中的特有方法
 * @Author : lin_refuel@qq.com
 */
public class demo02 {
    public static void main(String[] args) {
        //TODO 一个list的集合,list集合是带有索引的,
        List<String> list = new ArrayList<>();
        // TODO 常用的几个方法,add添加元素
        list.add("东邪");
        list.add("西毒");
        list.add("南帝");
        list.add("北丐");
        list.add(2, "王重阳");//集合索引为2的位置添加王重阳
        System.out.println(list);
        System.out.println("==========================");
        //TODO remove,删除指定位置元素,返回被删除元素,删除索引为2的值
        System.out.println(list.remove(2));//返回值是王重阳
        System.out.println(list);
    }
}

set 和 get 方法

java 复制代码
package demo02;

import java.util.ArrayList;
import java.util.List;
/**
 * @Classname : demo02
 * @Description : TODO List集合中的特有方法
 * @Author : lin_refuel@qq.com
 */
public class demo02 {
    public static void main(String[] args) {
        //TODO 一个list的集合,list集合是带有索引的,
        List<String> list = new ArrayList<>();

        list.add("东邪");
        list.add("西毒");
        list.add("南帝");
        list.add("北丐");
        list.add(2, "王重阳");//集合索引为2的位置添加王重阳
        System.out.println(list);
       // TODO set方法,修改指定索引的值
        list.set(2,"周伯通");//王重阳被修改成为了周伯通
        System.out.println(list);
        //TODO get方法,返回指定索引的值
        System.out.println(list.get(3));//返回"南帝"
    }
}

运行结果

List集合的几种遍历方式

java 复制代码
package demo02;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @Classname : demo03
 * @Description : TODO List集合的几种遍历方式
 * @Author : lin_refuel@qq.com
 */
public class demo03 {
    public static void main(String[] args) {
        //空的list集合
        List<String> list = new ArrayList<>();
        //添加几个元素
        list.add("雷伊");
        list.add("盖亚");
        list.add("卡修斯");
        list.add("布莱克");
        //TODO list集合遍历:方式一 for循环进行遍历
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i)+",");
        }
        System.out.println("\n===================");
        //TODO 方式二:增强for循环
        for(String name : list){
            System.out.print(name+",");
        }
        System.out.println("\n===================");
        //TODO 方式三:迭代器 Iterator
        Iterator<String> it = list.iterator();
        while (it.hasNext())
            System.out.print(it.next()+",");
    }
}

并发性异常的起因和处理方式

并发性异常,当使用迭代器遍历集合时,往集合里面添加新的元素,这个会导致迭代器报出异常,该异常是非检测性异常

demo: 处理上面异常的方式

java 复制代码
package demo02;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @Classname : demo04
 * @Description : TODO 并发性异常处理方式
 * @Author : lin_refuel@qq.com
 */
public class demo04 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        //集合里面的原始数据
        list.add("JavaSE");
        list.add("JavaScript");
        list.add("MySQL");
        list.add("JavaWeb");
        //建立一个for循环,先进行添加
        for (int i = 0; i < list.size(); i++) {
            if("MySQL".equals(list.get(i)))
                list.add(i+1,"JDBC");
        }
        //System.out.println(list);
        //再次通过迭代器进行遍历
        Iterator<String> it = list.iterator();
        while(it.hasNext()) {
            System.out.print(it.next()+",");
        }
    }
}

ListIterator迭代器

  • ListIterator:列表迭代器

    • 通过 List 集合的 listIterator() 方法得到,所以他是 List 集合的特有迭代器

    • 用于允许程序员沿任何一个方向遍历列表的迭代器,在迭代期间修改列表,并获取列表迭代器的当前位置

方法名 说明
E next() 返回迭代中的下一个元素
boolean hasNext() 如果迭代具有更多元素,则返回 true
E pervious() 返回列表中的上一个元素
boolean hasPrevious() 如果此列表迭代器在相反方向遍历列表是具有更多元素,则返回 true
void add(E e) 将指定元素插入列表
java 复制代码
package demo02;

import java.util.ArrayList;

import java.util.ListIterator;

/**
 * @Classname : demo05
 * @Description : TODO List iterator
 * @Author : lin_refuel@qq.com
 */
public class demo05 {
    public static void main(String[] args) {
        //一个空的集合
        ArrayList<String> list = new ArrayList<>();
        //添加元素
        list.add("JavaSE");
        list.add("HTML");
        list.add("JavaScript");
        list.add("JDBC");
        //迭代器存储的原始的目录
        ListIterator<String> lit = list.listIterator();
        //循环遍历
        while (lit.hasNext()){
            System.out.print(lit.next()+",");
        }
        System.out.println("\n===========================");
        //TODO 集合的反向遍历是需要先进行一次正常遍历后才能反向遍历
      //  ListIterator<String> lit = list.listIterator();
        while(lit.hasPrevious()){
            System.out.print(lit.previous()+",");
        }
    }
}

运行结果:

ListIterator的并非性异常处理

java 复制代码
package demo02;

import java.util.ArrayList;
import java.util.ListIterator;

/**
 * @Classname : demo06
 * @Description : TODO ListIterator并发性异常处理
 * @Author : lin_refuel@qq.com
 */
public class demo06 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        //添加元素
        list.add("JavaSE");
        list.add("HTML");
        list.add("MySQL");
        list.add("JavaScript");
        //使用list集合的特有的迭代器ListIterator进行遍历
        ListIterator<String> lit = list.listIterator();
        //在"MySQL",的后面添加"JDBC"
        while(lit.hasNext()){
            String str = lit.next();
            if(str.equals("MySQL"))
               // TODO list.add("JDBC"); 会出现并非性异常
                //解决方式:调用ListIterator迭代器的方法add可以避免问题
                lit.add("JDBC");
        }
        System.out.println(list);
    }
}

list集合的几种遍历方式

java 复制代码
package demo02;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @Classname : demo07
 * @Description : TODO list集合的几种遍历方式
 * @Author : lin_refuel@qq.com
 */
public class demo07 {
    public static void main(String[] args) {
        //学生类集合
        ArrayList<Student> stuList = new ArrayList<Student>();
        //添加对象
        stuList.add(new Student("Licinius", 13));
        stuList.add(new Student("vinicius", 7));
        stuList.add(new Student("Mbappe", 5));
        stuList.add(new Student("messi", 10));
        stuList.add(new Student("neymar", ));
        stuList.add(new Student("ronaldo", 13));
        //TODO **********************************************
        //方式一:for循环遍历
//        for (int i = 0; i < stuList.size(); i++) {
//            System.out.println(stuList.get(i).getName() + ","+stuList.get(i).getAge());
//        }
        //方式二:增强for循环
//        for (Student stu : stuList) {
//            System.out.println(stu.getName() + ","+stu.getAge());
//        }
        // 方式三:迭代器
        Iterator<Student> it = stuList.iterator();
        while(it.hasNext()){
            Student next = it.next();
            System.out.println(next.getName() +","+next.getAge());
        }
    }
}

Linkedlist的一些常用方法

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

demo:使用方式

java 复制代码
package demo03;

import java.util.LinkedList;

/**
 * @Classname : demo01
 * @Description : TODO linklist的常用方法
 * @Author : lin_refuel@qq.com
 */
public class demo01 {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();
        //添加元素
        list.add("成员1");
        list.add("成员2");
        list.add("成员3");
        list.add("成员4");
        //TODO *************************************
        //在头和尾添加成员方法
//        list.addFirst("成员0"); // 头部添加 成员0
//        list.addLast("成员5");//尾巴添加 成员5
//        System.out.println(list);//[成员0, 成员1, 成员2, 成员3, 成员4, 成员5]
        //TODO***************************************
        //获取头部成员和尾部成员
        System.out.println(list.getFirst()); //成员1
        System.out.println(list.getLast()); //成员4
        //TODO***************************************
        //删除尾部和头部分成员,并且返回被删除的成员
        System.out.println(list.removeLast());//删除尾部成员4,返回删除值成员4
        System.out.println(list.removeFirst());//删除头部成员1,返回删除成员1
        //测试删除后的集合
        System.out.println(list);//[成员2, 成员3]
    }
}
相关推荐
XuanRanDev38 分钟前
【每日一题】LeetCode - 三数之和
数据结构·算法·leetcode·1024程序员节
代码猪猪傻瓜coding40 分钟前
力扣1 两数之和
数据结构·算法·leetcode
plmm烟酒僧1 小时前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv
南宫生2 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
weixin_432702263 小时前
代码随想录算法训练营第五十五天|图论理论基础
数据结构·python·算法·深度优先·图论
passer__jw7674 小时前
【LeetCode】【算法】283. 移动零
数据结构·算法·leetcode
Jtti4 小时前
Windows系统服务器怎么设置远程连接?详细步骤
运维·服务器·windows
爱吃生蚝的于勒4 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~4 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
小奥超人4 小时前
PPT文件设置了修改权限,如何取消权?
windows·经验分享·microsoft·ppt·办公技巧