2020.8.4List集合

01_List集合

定义:元素有序,并且每一个元素都存在一个索引.元素可以重复.

List集合的特有功能概述
	void add(int index,E element):	在指定索引处添加元素
	E remove(int index):移除指定索引处的元素  返回的是移除的元素
	E get(int index):获取指定索引处的元素
	E set(int index,E element):更改指定索引处的元素 返回的而是被替换的元素
	int indexOf(Object o) 
          返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。 
    int lastIndexOf(Object o) 
          返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。

案例演示

package ListDemo01;

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

public class ListTest01 {
    public static void main(String[] args) {
        //创建一个List集合
        List list = new ArrayList();
        //往集合中加入元素
        list.add(100);
        list.add(100);
        list.add(200);
        list.add(200);
        list.add(300);
        list.add(400);
        //指定索引位置添加元素
        list.add(2,666);//[100, 100, 666, 200, 200, 300, 400]
        System.out.println(list);

    }
}

01.1_通过索引来获取集合中的元素

package ListDemo01;

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

//get(list.size() - 1); 通过索引来获取集合中的元素
public class ListTest02 {
    public static void main(String[] args) {
        //创建一个List集合
        List list = new ArrayList();
        //往集合中加入元素
        list.add(100);
        list.add(100);
        list.add(200);
        list.add(200);
        list.add(300);
        list.add(400);
        System.out.println(list.get(3));//200
        System.out.println(list.get(list.size() - 1));//400
    }
}

01.3_根据元素来删除remove

package ListDemo01;

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

//根据元素来删除remove
public class ListTest03 {
    public static void main(String[] args) {
        //创建一个List集合
        List list = new ArrayList();
        //往集合中加入元素
        list.add(100);
        list.add(100);
        list.add(200);
        list.add(200);
        list.add(300);
        list.add(400);
       //list.remove(200);这时候索引和元素区分不出来,我们可以使用手动装箱
        list.remove(Integer.valueOf(200));//[100, 100, 200, 300, 400]
        //一次只删一个元素
        System.out.println(list);
        //根据索引删除元素
        list.remove(3);
        System.out.println(list);//[100, 100, 200, 400]
    }
}

01.4_List集合遍历

package ListDemo01;

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

public class ListTest01 {
    public static void main(String[] args) {
        //创建一个List集合
        List list = new ArrayList();
        //往集合中加入元素
        list.add(100);
        list.add(100);
        list.add(200);
        list.add(200);
        list.add(300);
        list.add(400);
        //指定索引位置添加元素
        list.add(2,666);//[100, 100, 666, 200, 200, 300, 400]
        System.out.println(list);
        //得到某个元素
        System.out.println(list.get(2));//666
        //遍历数组
        for (int i = 0; i < list.size(); i++) {
            Object o = list.get(i);
            System.out.println(o);
        }
        //List也有属于自己的迭代器
        Iterator listIterator = list.listIterator();
        while (listIterator.hasNext()){
            Object o = listIterator.next();
            System.out.print(o);
        }

    }
}

01.5_ListIterator遍历

package ListDemo01;

import CollectionDemo01.Student;

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

//List集合的遍历
//方式1循环遍历
//方式2迭代器遍历
public class ListLength01 {
    public static void main(String[] args) {
        Student s1 = new Student("詹姆斯",35);
        Student s2 = new Student("霍华德",30);
        Student s3= new Student("韦德",34);
        Student s4 = new Student("安东尼",32);
        List list=new ArrayList();
        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);
        //使用集合遍历,就是将集合中的到的每个元素,强行转换为Student类,然后得到他的变量
        for (int i = 0; i < list.size(); i++) {
            Object o = list.get(i);
            Student student= (Student) o;
            System.out.print(student.getName()+" "+student.getAge()+"\t");//詹姆斯 35 霍华德 30 韦德 34  安东尼 32

        }
        //方法二、迭代器,就是将迭代出来的元素向下转型为Student
        Iterator listiterator=list.listIterator();
        while (listiterator.hasNext()){

            Student student = (Student) listiterator.next();
            System.out.print(student.getName()+" "+student.getAge()+"\t");
        }

    }
}

01.7_ListIterator的特有功能

反向遍历

ListIterator 继承自Iterator  可以使用Iterator中的方法
	ListIterator的特有功能
		boolean hasPrevious():			是否存在前一个元素
		E previous():					返回列表中的前一个元素
		以上两个方法可以实现反向遍历 但是注意 要完成反向遍历之前 要先进行正向遍历  这样指针才能移到最后
		如果直接反向遍历是没有效果的  因为指针默认位置就在最前面 他前面没有元素

案例演示:ListIterator

package ListDemo01;

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

//:ListIterator的特有功能也就死反向迭代
//在进行反向之前一定要进行正向迭代,就像压子弹,只有压下去了,固定卡榫才可以反向的向上运动
//如果没有压子弹,卡栓就在顶头,反向是空的,没有意义
public class ListIteratorTest01 {
    public static void main(String[] args) {
        //创建一个List集合
        List list = new ArrayList();
        //往集合中加入元素
        list.add(100);
        list.add(100);
        list.add(200);
        list.add(200);
        list.add(300);
        list.add(400);
        //正向迭代
        ListIterator listIterator = list.listIterator();
        while(listIterator.hasNext()){
            Object obj = listIterator.next();
            System.out.print(obj+"\t");
        }
        System.out.println();//100 100    200    200    300    400
        //反向迭代
       /* boolean hasPrevious():   是否存在前一个元素
     E previous():  返回列表中的前一个元素*/
       while (listIterator.hasPrevious()){
           Object previous = listIterator.previous();
           System.out.print(previous+"\t");//400   300    200    200    100    100
       }

    }
}

01.8_案例演示:迭代器并不是都能遍历

package BigDemo01;

import com.sun.glass.ui.Size;

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

public class MyTest03 {
    /* A:
     案例演示
     需求:我有一个集合,请问,我想判断里面有没有 "world" 这个元素,
     如果有,我就添加一个 "javaee" 元素,请写代码实现。*/
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add("world");
        list.add("aaa");
        list.add("bbb");
        //迭代器遍历
        Iterator iterator = list.iterator();
        System.out.println("-------------------------")
        /*while(iterator.hasNext()){
            String next = (String) iterator.next();
            if("world".equals(next)){
                list.add("javaee");
            }
        }*/
        //System.out.println(list);
        for (int i = 0; i < list.size(); i++) {
            String next = (String) list.get(i);
            if("world".equals(next)){
                list.add("javaee");
            }
        }
        System.out.println(list);
    }

}
我们用Iterator这个迭代器遍历采用hasNext方法和next方法,集合修改集合 会出现并发修改异常
原因是我们的迭代依赖与集合 当我们往集合中添加好了元素之后 获取迭代器  那么迭代器已经知道了集合的元素个数。
这个时候你在遍历的时候又突然想给 集合里面加一个元素(用的是集合的add方法) 那迭代器不同意 就报错了。

案例演示:循环遍历,比较相同,相同就删除,只留本身

package BigDemo01;

import java.util.ArrayList;

public class Mytest04 {
    public static void main(String[] args) {
        //作业:去除集合中的重复元素,要求,不能创建新的集合。只在原有集合中操作。
        ArrayList list =new ArrayList();
        list.add(20);list.add(20);list.add(120);list.add(20);list.add(202);list.add(20);
        list.add(20);list.add(20);list.add(30);list.add(30);list.add(20);list.add(20);
        list.add(660);list.add(40);list.add(20);list.add(50);list.add(50);
        System.out.println(list.size());//17//20 120 202 30 660 40 50
        for (int i = 0; i < list.size() - 1; i++) {
            for (int j = list.size()-1; j > i; j--) {
                if(list.get(i).equals(list.get(j))){
                    list.remove(j);
                }
            }

        }
        System.out.println(list);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有点。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值