011—JAVASE中最常用的部分集合之一(list)

本文详细介绍了Java集合框架中List接口的特性、常用方法以及其实现类如ArrayList和LinkedList的区别。文章通过示例展示了List接口如何进行增删改查操作,并探讨了List接口特有的插入、删除、查找和子集方法。此外,还提供了多种List遍历方式的示例代码,包括普通for循环、迭代器和ListIterator。
摘要由CSDN通过智能技术生成

与collection的继承图谱

 由图可知,集合vector,ArrayList ,LinkedList 都继承于父类AbstractList,并实现了list,间接实现了Collection,因此Collection中的方法所有的实现类都可以使用。

回顾Collection中的方法

增:add()        addAll()

删:remove()          removeAll()

改:   没有

查:   contains(Object)    containsAll(Object)      

其它        size()   isEmpty()   iterator()    toArray() (转成Object类型数组)                   toArray(T[]) (转成指定类型数组) clear()  equals()     hashCode()                  retainAll()

List中新增的方法

分析:list是接口,不能创建实例,只能通过实现类对其方法进行展示,ArrayList和vector,底层都是Object[] elementData;数组进行存储,而ArrayList完全是对数组不可变性的替代,

而数组最本质的特点就是有下标,因此查询和删除的效率比较高,但是增加和删除的效率比较低,因为下标,所以List接口中增加了许多与下标相关的方法。

List特点

有序:添加元素按照索引

不唯一:元素可以重复

List除了Collection中的方法新增加的方法

public class Test01 {
    @Test
    public void test02() {

        List<String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("李四");
        List<String> newList = new ArrayList<>();

        newList.add("妲己");
        newList.add("安琪拉");
        newList.add("妲己");

        //指定的位置插入集合
        list.addAll(1, newList);
        System.out.println("list = " + list);

        int index = list.indexOf("妲己");
        System.out.println("index = " + index);
        获取指定元素最后一次出现的下标  没有数据返回-1
        int index1 = list.lastIndexOf("妲己");
        System.out.println("index1 = " + index1);


    }
    @Test
    public void test01(){

        List <String> list = new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("李四");
        System.out.println("list = " + list);
        list.add(1, "李白");
        list.remove(2);
        list.set(3, "武则天");

        list.contains("武则天");
        String s = list.get(3);
        System.out.println("s = " + s);


    }
}

增        1> add(index,ele)   在指定位置新增数据

                 addAll(index,newList)  指定的位置插入集合

删        2> remove(index)   删除指定下标的数据

改        3> set(index,ele)    修改/设置 指定下标的数据

查        4> contains(ele)     判断指定元素是否存在于集合内 

                containsAll()          判断一个集合中是否包含其他集合中的所有元素

                get(index)         获取指定下标的数据

                indexOf(ele);     获取第一次出现的下标 没有数据返回-1

                lastIndexOf(ele); 获取指定元素最后一次出现的下标  没有数据返回-1

                subList(int,int)        指定一个集合的子集合,从起始下标到结束下标

遍历       5> itetator()

                   listIterator()       可以倒叙遍历(list接口独有的)

排序方法   6> sort()  排序 如果是自定义类型一定要指明排序规则

12个 几乎都与下标有关系  

List的所有遍历

public class BianLi {
    //成员变量
    List<String> list = new ArrayList<>();

    @Before
    public void test00(){


        list.add("张三");//0
        list.add("李四");//1
        list.add("王五");//2
        list.add("赵六");//3
        list.add("安琪拉");//4
        System.out.println("Before 执行了 ");
    }
    @Test
    public void test06(){
        //开发中的遍历方式
        list.forEach(System.out::println);

    }

    @Test
    public void test05(){
    /*
            list.listIterator(index);

            从前向后遍历: 从指定的下标开始 向后一直到结束

            从后向前遍历: 从指定下标-1 开始 向前一直到结束
         */
        //可以直接将游标定位到指定位置
        ListIterator<String> listIterator = list.listIterator(5);
        /*
        //可以将游标定位到最后
        while (listIterator.hasNext()){
            String next = listIterator.next();
            System.out.println("next = " + next);
        }*/
        while (listIterator.hasPrevious()){
            String previous = listIterator.previous();
            System.out.println("previous = " + previous);
        }
    }


    @Test
    public void test04(){
        // ListIterator 专门用于遍历 List接口下的集合
        ListIterator<String> listIterator = list.listIterator();
        while (listIterator.hasNext()){
            //获取当前元素的前一个元素的下标
            int previousIndex = listIterator.previousIndex();
            String next = listIterator.next();
            //获取当前元素的后一个元素的下标
            int nextIndex = listIterator.nextIndex();
            System.out.println(previousIndex + " <-----ele = " + next + "--> "+nextIndex);
        }

        System.out.println("-------------------------------");
        判断光标前是否有数据
        while (listIterator.hasPrevious()){
            String ele = listIterator.previous();
            int previousIndex = listIterator.previousIndex();
            System.out.println("ele = " + ele);
        }
    }

    @Test
    public void test03(){
        //方式三   list有下标  普通遍历
        for (int index = 0; index < list.size(); index++) {
            String ele = list.get(index);

            System.out.println("普通for遍历  = " + ele);

        }


    }


    @Test
    public void test02(){
        //方式二  迭代器遍历
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String ele = iterator.next();
            System.out.println("迭代器遍历 = " + ele);
        }


    }

    @Test
    public void test01(){
    //list遍历方式一
        for (String s : list) {
            System.out.println("增强for循环 = " + s);
        }

    }


}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值