List接口中常用方法

List接口常用方法【熟悉】

package edu.tjdz.javaSE.collection;

import java.util.*;

/*
测试List接口中的常用方法
    1、List集合存储元素特点:有序可重复
        有序:List集合中元素由下标。
          从0开始,以1递增。
        可重复:存储一个1,还可以在存储一个1.

    2、List即是Collection接口中的子接口,那么肯定List接口有自己“特色”的方法:
        以下只列出List特有的常用的方法
        void add(int index, E element)  在列表的指定位置添加元素(第一个参数是下标)
        Object get(int index)     根据下标获取元素(元素的下标,从0开始,以1递增)
        int indexOf(Object o)   //获取指定对象第一次出现的索引
        int lastIndexOf(Object o)     //获取指定对象最后一次出现的索引
        Object remove(int index)      //删除指定下标位置的元素
        Object set(int index, Object element)   //修改指定位置元素(元素下标,修改的值)



 */
public class CollectionTest07 {
    public static void main(String[] args) {
        //创建List集合
        //List myList = new LinkedList();
        //List myList = new Vector();
        List myList = new ArrayList();

        //添加元素
        myList.add("A");  //默认都是向集合尾部添加元素
        myList.add("B");
        myList.add("C");
        myList.add("D");
        myList.add("A");

        //在列表的指定位置添加元素(第一个参数是下标)
        //这个方法使用不多,因为对于ArrayList集合来说,效率较低(因为ArrayLIst底层是数组,添加的时候会涉及到元素位移的问题)
        myList.add(1,"KING");

        //迭代
        Iterator it = myList.iterator();
        while(it.hasNext()){
            Object elt = it.next();
            System.out.println(elt);
        }

        System.out.println("------------------------------");

        //根据下标
        Object firstobj = myList.get(0);
        System.out.println(firstobj);  //A

        //因为有下标,所以List集合有自己特殊的遍历方式
        //根据下标遍历【List集合特有的方式,Set没有。】
        for(int i=0;i<myList.size();i++){
            Object obj = myList.get(i);
            System.out.println(obj);
        }

        //获取指定对象第一次出现的索引
        System.out.println(myList.indexOf("KING"));  //1

        //获取指定独享最后一次出现处的索引
        System.out.println(myList.lastIndexOf("A")); //5

        //删除指定下标位置的元素
        myList.remove(0);
        System.out.println(myList.size()); //5

        System.out.println("================================");
        //修改指定位置元素
        myList.set(0,"Soft");

        //遍历集合
        for(int i=0;i<myList.size();i++){
            Object obj = myList.get(i);
            System.out.println(obj);
        }
    }
}

**关于集合元素的remove方法

package edu.tjdz.javaSE.collection;

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

/*
关于集合元素的remove
    重点:当集合的结构发生改变时,迭代器对象必须重新获取,如果还是以前老的迭代器,
    会出现异常:java.util.ConcurrentModificationException

    重点:在迭代集合元素的过程中,不能调用集合对象的remove()方法,删除元素:
        c.remove(o); 迭代过程中不能这样
        会出现:java.util.ConcurrentModificationException

    重点:在迭代元素的过程当中,一定要使用迭代器Iterator的remove方法,删除元素,
    不要使用集合中自带的remove方法删除元素。
 */
public class CollectionTest06 {
    public static void main(String[] args) {
        //创建集合
        Collection c = new ArrayList();

        // 获取迭代器
        //注意:此时获取的迭代器是,指向的是那个集合中没有元素状态下的迭代器。
        // 一定要注意:集合结构只要发生改变,迭代器对象必须重新获取。
        // 当集合结构发生改变,迭代器没有重新获取时,调用next()方法:java.util.ConcurrentModificationException
        //Iterator it = c.iterator();

        // 添加元素
        c.add(1);
        c.add(2);
        c.add(3);

        // 获取迭代器
        Iterator it = c.iterator();

        while(it.hasNext()){
            //编写代码时next()方法返回类型必须是Object
            Object obj = it.next();
            if(obj instanceof Integer){
                System.out.println("Integer类型");
            }
            System.out.println(obj);
        }

        Collection c2 = new ArrayList();
        c2.add("abc");
        c2.add("def");
        c2.add("xyz");

        Iterator it2 = c2.iterator();
        while(it2.hasNext()){
            Object o = it2.next();
            //删除元素
            //删除元素之后,集合元素发生了变化,应该重新去获得迭代器
            //但是,循环下一次的时候,并没有重新获取迭代器,所以会出现异常:java.util.ConcurrentModificationException
            //c2.remove(o);   //直接通过集合去删除,没有通知迭代器。(导致迭代器的快照和元集合状态不同。)
            //使用迭代器来删除可以吗?
            //迭代器去删除时,会自动更新迭代器,并且更新集合(删除集合中的元素)。
            it2.remove(); //删除的一定是迭代器指向的当前元素。
            System.out.println(o);
        }
        System.out.println(c2.size());
    }
}


版权声明:本文为qq_54864699原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。