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]
}
}