1.List

文章详细介绍了ArrayList和LinkedList两种Java集合类,包括它们的特点、基本操作、底层原理以及五大循环方式。ArrayList基于数组,适合查询和修改,但增加删除效率较低;LinkedList采用双向链表,增加删除快速,但查询和修改较慢。此外,文章还提到了已淘汰的Vector类,因其线程安全但性能较低。
摘要由CSDN通过智能技术生成

list为单列结合,继承于collection,有序,可重复,有索引,有以下API:

1.1ArrayList

特点:底层是数组,查询修改快,增加删除慢。

ArrayList的基本操作代码如下:

 

public class ArrayListDemo {
    public static void main(String[] args) {
        //1.创建一个集合
        List<String> list=new ArrayList<>();
        //2.添加元素
        list.add("香蕉");
        list.add("苹果");
        list.add("苹果");
        list.add("西瓜");
        list.add("橙子");
        //打印结果可知list元素中有序且可以重复
        System.out.println(list);  //[香蕉, 苹果, 苹果, 西瓜, 橙子]
        //3.指定位置插入元素
        list.add(0,"橘子");
        //打印结果可知add会在指定索引插入元素,索引从0开始
        System.out.println(list);   //[橘子, 香蕉, 苹果, 苹果, 西瓜, 橙子]
        //4.删除元素
        //通过索引删除,会返回删除的值
        System.out.println(list.remove(0));  //橘子
        System.out.println(list);   //[香蕉, 苹果, 苹果, 西瓜, 橙子]
        //5.根据索引修改元素
        list.set(1, "芒果");
        //6.通过索引获取元素
        System.out.println(list.get(1));   //芒果
        
    }
}

1.2ArrayList的五大循环

//list的五大循环
public class ArrayListLoop {
    public static void main(String[] args) {
        List<String> list=new ArrayList<>();
        list.add("你");
        list.add("一会看我");
        list.add("一会看云");
        list.add("我觉得");
        list.add("你看我时很远");
        list.add("你看云时很近");
        System.out.println("1.-------------------");
        //1.增强for循环,只能遍历
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("2.-------------------");
        //2.迭代器循环,可用作删除元素
        Iterator<String> iterator=list.iterator();
        while (iterator.hasNext()){
            String s = iterator.next();
            //iterator.remove();
            System.out.println(s);
        }
        System.out.println("3.-------------------");
        //3.lambda循环,只能遍历
        list.forEach(str-> System.out.println(str));
        System.out.println("4.-------------------");
        //4.列表迭代器循环,可用作添加元素
        ListIterator<String> listIterator= list.listIterator();
        while (listIterator.hasNext()){
            String s = listIterator.next();
            //listIterator.add("很远很远");
            System.out.println(s);
        }
        System.out.println("5.-------------------");
        //5.普通for循环,可操作索引
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

    }
}

1.3ArrayList的底层原理

1.底层为数组

2.利用空参构造的集合,在底层创建一个默认长度为0的数组

3.添加第一个元素是,底层会创建一个新的长度为10的数组

4.当超过容量时,会扩容为原来的1.5倍。

5.如果添加的元素过多,超过了1.5倍的扩容,则创建的数组长度以实际长度为标准。

1.4LinkedList

特点:底层的数据结构是双向链表,查询修改慢,增加删除快。

LinkedList的基本操作如下:

public class LinkedListDemo {
    public static void main(String[] args) {
        //1.定义一个集合
        LinkedList<String> list=new LinkedList<>();
        //2.在头部添加元素
        list.addFirst("a");
        list.addFirst("b");
        list.addFirst("c");
        //3.在尾部添加元素
        list.addLast("d");
        list.addLast("e");
        list.addLast("f");
        //4.获取头部元素
        System.out.println(list.getFirst());  //c
        //5.获取尾部元素
        System.out.println(list.getLast());   //f
        //6.删除头部元素
        System.out.println(list.removeFirst());  //c
        //7.删除尾部元素
        System.out.println(list.removeLast());    //f
    }
}

1.5LinkedList的五大循环

//LinkedList的五大循环
public class LinkedListLoop {
    public static void main(String[] args) {
        //1.定义一个集合
        LinkedList<Integer> list=new LinkedList<>();
        //2.添加元素
        list.addLast(1);
        list.addLast(2);
        list.addLast(3);
        list.addLast(4);
        list.addLast(5);

        System.out.println("--------1.--------");
        //3.for循环
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i)+" ");
        }
        System.out.println();
        System.out.println("--------2.--------");
        //4.增强for循环
        for (Integer integer : list) {
            System.out.print(integer+" ");
        }
        System.out.println();
        System.out.println("--------3.--------");
        //5.lambda循环
        list.forEach(i-> System.out.print(i+" "));
        System.out.println();
        System.out.println("--------4.--------");
        //6.迭代器循环
        Iterator<Integer> iterator= list.iterator();
        while (iterator.hasNext()){
            Integer i = iterator.next();
            System.out.print(i+" ");
        }
        System.out.println();
        System.out.println("--------5.--------");
        //7.列表迭代器遍历
        ListIterator<Integer> listIterator = list.listIterator();
        while (listIterator.hasNext()){
            Integer i = listIterator.next();
            System.out.print(i+" ");
        }
    }
}

1.6LinkedList的底层原理

由于底层采用的双向链表,无需扩容。

1.7Vector(已经淘汰)

vector和ArrayList很像,底层都是数组,但是vector是线程安全的,大多数方法使用了synchronized关键字,扩容机制是两倍。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值