Java集合(2)——List

List

1.集合的体系

-------|Collection:单例集合的根接口。
------------|List:如果是实现了List接口的集合类,具备的特点:有序,可重复。
------------|Set:如果是实现了Set接口的集合类,具备的特点:无序,不可重复。

有序:集合的有序不是指自然顺序,而是指添加进去的顺序与元素出来的顺序是一致的。

栗子如下:

public class Demo1 {

    public static void main(String[] args){
        List list = new ArrayList();
        list.add("小张");
        list.add("小李");
        list.add("小王");
        list.add("小赵");
        list.add("小赵"); //有序可重复
        System.out.println("集合的元素:"+list); //按照添加的顺序进行输出,有序
    }

}


2.List接口中特有的方法(Collection中的方法都具备):

(1)添加

add(int index,E element):把元素添加到集合中指定索引的位置上。
addAll(int index,Collecion c):把list1的元素添加到list集合指定索引的位置上。

栗子如下:

public class Demo2 {
    public static void main(String[] args){
        List list = new ArrayList();
        list.add("小娃");
        list.add("小胜");
        list.add("小铁"); //把元素添加到集合的末尾处

        list.add(1, "小能");
        System.out.println("集合的元素:"+list);

        List list1 = new ArrayList();
        list1.add("小样");
        list1.add("小四");
        list.addAll(1, list1); //把list1的元素添加到list集合指定索引的位置上
        System.out.println("集合的元素:"+list);
    }
}

(2)获取

get(int index):根据索引值获取集合的元素。
indexOf(object o):找出指定元素第一次出现在集合中的索引值。
lastIndexOf(object o):找出指定元素最后一次出行在集合中的索引值。
subList(int fromIndex, int toIndex):指定开始与结束的索引值截取集合中的元素。

栗子如下:

public class Demo3 {
    public static void main(String[] args){
        List list = new ArrayList();
        list.add("小娃");
        list.add("小胜");
        list.add("小铁");
        list.add("小丹");
        System.out.println("get方法获取元素:"+list.get(1)); //根据指定的索引值获取集合中的元素
        for(int i=0; i<list.size(); i++){
            System.out.print(list.get(i) + " ");
        }
        System.out.println();
        System.out.println("找出指定元素第一次出现在集合中的索引值:"+list.indexOf("小铁"));
        System.out.println("找出指定元素最后一次出现在集合中的索引值:"+list.lastIndexOf("小铁"));

        List subList = list.subList(1, 4); //指定开始与结束的索引值截取集合中的元素
        System.out.println("子集合的元素:"+subList);

    }
}

(3)修改

set(int index, E element):使用指定的元素替换指定索引值位置的元素。

public class Demo4 {
    public static void main(String[] args){
        List list = new ArrayList();
        list.add("小娃");
        list.add("小胜");
        list.add("小单");
        list.set(1, "小四"); //使用指定的元素替换指定索引位置的元素
        System.out.println("集合的元素:"+list);
    }
}

(4)迭代

ListIterator():返回的是一个ListIterator迭代器对象。
ListIterator特有的方法:
hasPrevious();
previous();
add(E e);
set(E e);

public class Demo5 {

    public static void main(String[] args){
        List list = new ArrayList();
        list.add("小张");
        list.add("小赵");
        list.add("小王");
        list.add("小刘");
        ListIterator it = list.listIterator();
        System.out.println("有上一个元素吗?"+it.hasPrevious()); //false
        //System.out.println("获取上一个元素:"+it.previous()); //报错,此时指针在第一个位置
        it.next();
        System.out.println("获取上一个元素:"+it.previous()); //先向上移动一个单位,再获取元素
        //死循环
        /*while(it.hasNext()){
            it.next(); //先取再移
            System.out.println("元素:"+it.previous()); //先移再取
        }*/
        //遍历
        while (it.hasNext()){
            it.next();
        }
        while(it.hasPrevious()){
            System.out.print(it.previous() + " "); //倒着遍历
        }
        System.out.println();
        it.add("小样"); //必须有指针指向时才可以添加
        it.next();
        it.set("小能"); //替换当前指针指向的元素
        System.out.println("集合的元素:"+list);
    }
}

练习:使用四种方式遍历集合的元素
方式一:使用get方式遍历
方式二:使用迭代器正序遍历
方式三:使用迭代器逆序遍历
方式四:使用toArray数组

public class Demo6 {
    public static void main(String[] args){
        List list = new ArrayList();
        list.add("小三");
        list.add("小四");
        list.add("小五");
        list.add("小六");
        System.out.println("集合的元素:"+list);
        //方式一:使用get遍历
        for(int i=0; i<list.size(); i++){
            System.out.print(list.get(i) + " ");
        }
        System.out.println();
        //方式二:使用迭代器正序遍历
        ListIterator it = list.listIterator();
        while(it.hasNext()){
            System.out.print(it.next() + " ");
        }
        System.out.println();
        //方式三:使用迭代器倒序遍历
        while(it.hasNext()){
            it.next();
        }
        while(it.hasPrevious()){
            System.out.print(it.previous() + " ");
        }
        System.out.println();
        //方式四:使用toArray数组
        Object[] objArr = list.toArray();
        for(int i=0; i<objArr.length; i++){
            System.out.print(objArr[i] + " ");
        }
    }
}
2.迭代器在遍历元素的时候要注意的事项:

(1)在迭代器迭代(遍历)元素的过程中,不允许使用集合对象改变集合中的元素个数(如:list.add(“aa”);list.remove(“aa”)),如果需要增加或删除,只能使用迭代器的方法进行操作。如果使用集合对象的方法改变集合中的元素个数,就会出现ConcurrentModificationException异常

public class Demo7 {

    public static void main(String[] args){
        List list = new ArrayList();
        list.add("小三");
        list.add("小四");
        list.add("小五");

        //获取到迭代器
        ListIterator it = list.listIterator();
        while(it.hasNext()){
            System.out.print(it.next() + " ");
            it.add("aa"); //把元素添加到当前指针指向的后一个位置
        }
        System.out.println();
        System.out.println("集合的元素:"+list);
    }
}

(2)迭代元素的过程中:迭代器一旦创建到使用结束的时段。即list.add不能出现在获取迭代器语句(ListIterator it = list.listIterator();)和it.next()语句之间。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值