Java基础进阶——List集合详解(看这一篇就够了,详解)

前言:

        list集合属于Java集合体系中的单列集合,继承于父类Collection,如果你对Collection不了解,可以先看这篇文章1️⃣Java中的集合体系学习汇总(List/Map/Set 详解)-优快云博客文章浏览阅读77次,点赞6次,收藏7次。细节1: 如果我们要往List系列集合中添加数据, 那么方法永远返回true, 因为List系列的是允许元素重复的。细节2: 方法会有一个布尔类型的返回值, 删除成功返回true, 删除失败返回false,如果要除的元素不存在,就会删除失败。所以,如果集合中存储的是自定义对象,也想通过contains方法来判断是否包含,那么在java Bean类中,一定要重写equals方法。增强for的底层是用迭代器实现的,在遍历时,也不能直接用集合的方法对元素进行增加或删除。添加数据时,一次只添加一个数据。https://blog.youkuaiyun.com/Future_yzx/article/details/145158979  先学习collection有助于你更好的理解List。

 

List系列集合

特点
①有序、可重复、有索引;
②List只是一个接口,它的实现类是ArrayList和LinkedList

 

(1)特有方法

// 1.public void add(int index,E element): 在某个索引位置插入元素。
list.add(3,"哆啦");
System.out.println(list);
​
// 2.public E remove (int index): 根据索引删除元素,并返回被删除元素
System.out.println(list.remove(5));
​
// 3. public E get(int index): 返回集合中指定位置的元素。
System.out.println(list.get(3));
​
// 4. public E set(int index,E element): 修改索引位置处的元素,修改成功后,会返回原来的数据
System.out.println(list.set(3, "哆啦咪"));

遍历方法:因为List集合支持索引,因此,在上面三种遍历方式基础上,还可以用for循环进行List集合的遍历。

 

(2)ArrayList

底层原理:

是基于数组来实现的(如图)

因此,ArrayList集合优缺点同数组的相同:查询快、增删慢。

查询速度快 :(注意:是根据索引查询数据快):查询数据通过地址值和索引定位,查询任意数据耗时相同

删除效率低:可能需要把后面很多的数据进行前移。 ● 添加效率极低:可能需要把后面很多的数据后移,再添加元素;或者也可能需要进行数组的扩容。

应用场景:

● 适合:根据索引index查询数据;比如根据随机索引取数据 (高效) !或者数据量不是很大时。

●不适合: 数据量大的同时,又要频繁的进行增删操作!

(3)LinkedList

底层原理:

是基于双向链表实现的

特点:查询慢,增删相对数组较快,但对首尾元素进行增删改查的速度极快的;

(1)特有方法

(2)应用场景

● 设计数据结构:队列

模拟队列的示例代码: 

public static void main(String[] args) {
    LinkedList<String> queue = new  LinkedList<>();
    //入队
    for (int i = 1; i < 6; i++) {
        queue.addLast("第"+i+"号人");
        System.out.println("第"+i+"号人入队:");
        System.out.println(queue);
    }
​
    System.out.println("-----------------------");
​
    //出队
    for (int i = 0; i < 3; i++) {
        Object o1 = queue.removeFirst();
        System.out.println(o1+"出队");
    }
    System.out.println("队列中还剩:"+queue);
}

● 设计数据结构:栈

①LinkedList中的pop( )方法:

②LinkedList中的push( )方法:

模拟栈的示例代码: 

public static void main(String[] args) {
    LinkedList<Object> stack = new LinkedList<>();
​
    for (int i = 1; i <6 ; i++) {
        stack.push("子弹"+i);
        System.out.println("子弹"+i+"入栈:");
        for (Object o : stack) {
            System.out.println("|"+o+"|");
        }
        System.out.println("-------------");
    }
​
    System.out.println("************************************");
​
    for (int i = 1; i <6 ; i++) {
        System.out.println(stack.pop()+"出栈:");
        for (Object o : stack) {
            System.out.println("|"+o+"|");
        }
        System.out.println("-------------");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值