List集合
![]()
/* List集合的特点
有序: 存储和取出的元素顺序一致
可重复: 存储的元素可以重复
*/
package List;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class List1 {
public static void main(String[] args) {
//创建集合对象 需要List和ArrayList两个包
List<String> list = new ArrayList<String>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
//输出集合对象
System.out.println(list);
//迭代器方式遍历
Iterator<String> it = list.iterator();
while(it.hasNext()){
String next = it.next();
System.out.println(next);
}
}
}
List 集合特有方法
package List;
import java.util.ArrayList;
import java.util.List;
/*
List 集合特有方法:
void add(int index, E element): 在此集合中的指定位置插入指定元素
E remove(int index): 删除指定索引的元素, 返回被删除的元素
E set(int index, E element): 修改指定索引处的元素, 返回被修改元素
E get(int index): 返回指定索引处的元素
*/
public class List2 {
public static void main(String[] args) {
List <String> list = new ArrayList<>();
//void add(int index, E element): 在此集合中的指定位置插入指定元素
list.add("hello");
list.add("world");
list.add("java");
list.add(3,"javaEE");
//E remove(int index): 删除指定索引的元素/元素, 返回被删除的元素/boolean
list.remove(0);
//E set(int index, E element): 修改指定索引处的元素, 返回被修改元素
list.set(0,"ArrayList");
//E get(int index): 返回指定索引处的元素
String s = list.get(0);
System.out.println(s);
System.out.println(list);
}
}
案例: 创建一个储存学生对象的集合,存储3个学生对象,在控制台遍历
/*
案例: 创建一个储存学生对象的集合,存储3个学生对象,在控制台遍历
思路:
1. 定义学生类,
2. 创建List集合对象
3. 创建学生对象
4. 把学生添加到集合
5. 遍历集合(迭代器方式, 用for循环方式(因为List集合是带索引的))
*/
package List;
import Collection.Student;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class studentListDemo {
public static void main(String[] args) {
//创建List集合对象
List<Student> list = new ArrayList<Student>();
//创建学生对象
Student s1 = new Student("Peppa",8);
Student s2 = new Student("George",5);
Student s3 = new Student("Chris",7);
//把学生添加到集合
list.add(s1);
list.add(s2);
list.add(s3);
//遍历集合 迭代器方式
Iterator<Student> it = list.iterator();
while(it.hasNext()){
Student next = it.next();
System.out.println(next.getName()+" , "+next.getAge());
}
System.out.println("----------------");
//遍历集合 for循环方式
for(int i =0; i<list.size(); i++){
Student student = list.get(i);
System.out.println(student.getName()+" , "+student.getAge());
}
}
}
并发修改异常
/*
需求:
我有一个集合: List<Strint> list = new ArrayList<String>();
里面有3个元素: list.add("hello"); list.add("world");list.add("java");
遍历集合: 得到每一个元素, 看有没有"world"这个元素, 如果有, 我就添加一个"javaee"元素,
*/
package List;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ConcurrentModificationExceptionDemo {
public static void main(String[] args) {
//创建集合
List<String> list = new ArrayList<>();
//添加对象
list.add("hello");
list.add("world");
list.add("java");
//遍历集合,判断并添加, (迭代器) 异常:ConcurrentModificationException:并发修改异常.
// Iterator<String> it = list.iterator();
// while(it.hasNext()){
// String s = it.next();
// if(s.equals("world")){
// list.add("javaEE");
// }
// }
//for循环实现,(解决方法)
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
if (s.equals("world")) {
list.add("javaEE");
}
}
System.out.println(list);
}
}
ListIterator 列表迭代器
![]()
package List;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/*
Listlterator:列表迭代器
·通过List集合的listlterator()方法得到,所以说它是List集合特有的迭代器
·用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置
Listlterator中的常用方法
.E next():返回迭代中的下一个元素
.boolean hasNext():如果迭代具有更多元素,则返回 true
.E previous():返回列表中的上一个元素
.boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回true
.void add(Ee):将指定的元素插入列表
*/
public class ListIteratorDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("111");//0
list.add("222");//1
list.add("333");//2
//遍历
System.out.println(list);
//反向遍历(for循环)
for (int i = 0; i < list.size(); i++) {
String s = list.get(list.size() - i - 1);
System.out.println(s);
}
System.out.println("--------------");
//list迭代器
ListIterator<String> li = list.listIterator();
//迭代器遍历
while (li.hasNext()) {
String next = li.next();
System.out.println(next);
}
//迭代器反向遍历方法
while (li.hasPrevious()) {
String previous = li.previous();
System.out.println(previous);
}
System.out.println("--------------");
//list迭代器的add方法不会产生<并发修改异常>
while (li.hasNext()) {
String next = li.next();
if (next.equals("333")) {
li.add("666");//list迭代器的add方法
}
}
System.out.println(list);//控制台输出:[111, 222, 333, 666]
}
}
增强for循环
![]()
package List;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class enhancedFor {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
String[] string = {"hello", "world", "java"};
for (int i : arr) { //数组中的变量类型 变量名 :(冒号) 数组的变量名
System.out.println(i);
}
for (String i : string) {
System.out.println(i);
}
Collection<String> s = new ArrayList<>();
s.add("循");
s.add("环");
for (String i : s) { //集合中的变量类型 变量名 :(冒号) 集合的变量名
System.out.println(i);
}
List<String> list = new ArrayList<>();
list.add("我");
list.add("是");
list.add("谁");
for (String i : list) {
System.out.println(i);
}
System.out.println("----------------------");
//内部原理是一个Iterator迭代器
for (String i : list) {
if (i.equals("是")) {
list.add("?");//ConcurrentModificationException
}
}
}
}
案例:用三种方法遍历学生集合
package List;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/*
案例: 创建一个储存学生对象的集合,存储3个学生对象,在控制台遍历
思路:
1. 定义学生类,
2. 创建List集合对象
3. 创建学生对象
4. 把学生添加到集合
5. 遍历集合
迭代器: 集合特有的遍历方式
普通for: 带有索引的遍历方式
增强for: 最方便的遍历方式
*/
public class traversalMethod {
public static void main(String[] args) {
//创建List集合对象
List<student> list = new ArrayList<>();
//创建学生对象
student s1=new student("Peppa",6);
student s2=new student("Shery",5);
student s3=new student("George",4);
//把学生添加到集合
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 i : list){
System.out.println(i.getName()+" , "+i.getAge());
}
}
}