List接口及其相关

List中数据可以重复

List中数据的存取有顺序

List接口方法

get() 指定索引对象. 索引值不能超过size大小

set() 对指定索引位置进行对象替换

insert() 对指定索引位置进行插入

remove() 对指定索引位置对象移除

indexOf() 返回指定对象首次出现的索引值

lastIndexOf() 返回指定对象最后一次出现的索引值

subList() 截取子集合, 结束索引不包括(前闭后开)

public static void listMethods() {
        List list = new ArrayList();
        list.add("abc");
        list.add("dd");
        list.add("aa");
        list.add("cc");
        list.add("dd");
        // get() 指定索引获取对象 索引值不能超过size大小
        Object o = list.get(1);
        System.out.println("获取对象" + o);//abc
        // set()指定索引位置进行替换对象
        Object set = list.set(0, 666);
        // insert 指定索引进行插入
        list.add(1, 999);
        // remove(int index)指定索引移除对象
        Object remove = list.remove(0);
        // indexOf() 返回指定对象首次出现索引值
        int dd = list.indexOf("dd");
        System.out.println("指定对象首次出现的索引值 " + dd);
        int dd1 = list.lastIndexOf("dd");
        System.out.println("指定对象最后一次出现的索引值 " + dd1);
        // 截取子集合 结束索引不包含 [)
        List list1 = list.subList(1, 3);
        System.out.println("元素内容 " + list);
        System.out.println("子list "+list1);
    }

 

输出结果:

 

 List接口的实现类

ArrayList

底层是数组(数组是一块连续的内存空间)查询效率高, 指定索引新增/删除效率较低

如果调用无参构造方法, 数组其实是空数组, 在第一次调用add的时候开始扩容, 默认生成一个长度为10的数组

LinkedList

底层是双向链表

查询性能较低, 指定索引新增/删除效率高

ArrayList与LinkedList的区别

ArrayList底层是数组, 内存空间连续, 在进行删除和添加的时候会进行数组扩容和元素移动

LinkedList底层是双链表

ArrayList查询性能较高因为地址空间连续, 在指定位置新增, 和删除的时候因为有数组元素移动所以性能较低

LinkedList查询是要对链表进行遍历(从头或从尾)所以性能较低, 在新增和删除元素的时候只需要改动前后两个节点的内容 因此性能较高

Vector

底层也是数组

方法内部加入了线程同步

 

posted @ 2021-01-01 00:00  小_Leo  阅读(84)  评论(0)    收藏  举报