ArrayList 与 LinkedList

目录

ArrayList

List.contains

LinkedList

总结

 


ArrayList

有序的(存储和读取的顺序是一致的)    有整数索引           允许重复的

底层数据结构是数组 查询 | 修改快 增删慢

package CeShi;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Lzy
 * @creat 2021-03-21-11:35
 * void add(int index, E element) :将元素添加到index索引位置上
 * 		E get(int index) :根据index索引获取元素
 * 		E remove(int index) :根据index索引删除元素
 * 		E set(int index, E element):将index索引位置的的元素设置为element
 * 	底层数据结构是数组 查询|修改快 增删慢
 */
public class ListDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add(0,"hello");
        list.add(1,"xiaoli");
        System.out.println("原数组: " + list);
        list.add(0,"xiaozhang");//添加在索引0处,原有数组总体右移
        System.out.println(list);

        System.out.println("打印索引2元素: " + list.get(2));
        System.out.println("去除索引1元素并打印: " +list.remove(1));
        System.out.println("去除索引1后: " + list);
        System.out.println("更改索引0元素并打印: " + list.set(0,"zzz"));
        System.out.println("最终: " + list);
    }
}

 

 

List.contains(o),比较list是否包含o

package CeShi;

import java.util.ArrayList;
/**
 * @author Lzy
 * @creat 2021-03-21-12:58
 * 判断元素是否在列表存在  contains()
 * 假如List中有n个元素,那么会调用n次o.equals(e),只要有一次o.equals(e)返回了true,
 * 那么list.contains(o)返回true,否则返回false
*/
public class ListTest {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("java");
        list.add("cpp");
        list.add("python");

        boolean flag = list.contains("php");
        System.out.println(flag);
    }
}

 

LinkedList

 LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢 访问数据的平均效率低,需要对链表进行遍历

需要更多的内存,因为ArrayList的每个索引的位置是实际的数据,而LinkedList中的每个节点中存储的是实际的数据和前后节点的位置

package CeShi;

import java.util.LinkedList;

/**
 * @author Lzy
 * @creat 2021-03-21-12:01
 * void addFirst(E e) :向链表的头部添加元素
 *  void addLast(E e):向链表的尾部添加元素
 *  E getFirst():获取链头的元素,不删除元素
 *  E getLast():获取链尾的元素,不删除元素
 *  E removeFirst():返回链头的元素并删除链头的元素
 *  E removeLast():返回链尾的元素并删除链尾的元素
 *
 *  LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢
 */
public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList<String> linked= new LinkedList<>();

        linked.add("every");
        linked.add("day");
        System.out.println("最初链表:" + linked);
        linked.addFirst("xiaoli");
        System.out.println("在头部添加元素: " + linked);

        linked.addLast("you");
        System.out.println("在尾部添加元素" + linked);
        linked.add(3,"missing");
        System.out.println("在索引3前添加元素: " +linked);
        System.out.println("获取头元素: " +linked.getFirst() +" 尾元素: "+ linked.getLast());

        System.out.println("删除头元素,并返回值: " + linked.removeFirst());
        System.out.println(linked);

    }
}

 

总结

ArrayList 的内部实现,其实是用一个对象数组进行存放具体的值,然后用一种扩容的机制,进行数组的动态增长。

其扩容机制可以理解为,如果元素的个数,大于其容量,则把其容量扩展为原来容量的1.5倍。

总结是截图另一个博主,侵删  传送门 Java 常见面试题之“Arraylist和Linkedlist的区别”

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值