List集合

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());
        }
    }
}

posted @ 2023-02-16 15:51  大宝贝94106  阅读(30)  评论(0)    收藏  举报