ArrayList和LinkedList

一、ArrayList

数组长度不可以发生改变

ArrayList集合的长度可以随意改变
对于ArrayList,有一个 代表泛型
泛型:也就是装在集合中的所有元素,全部都是统一类型

注意:泛型只能是引用类型,不能是基本数据类型

  • 错误写法: ArrayList<int> list1=new ArrayList();
    

对于ArrayList直接打印得到的不是地址,而是内容,如果内容是空,得到的是空的中括号【】

  • ArrayList中的常用方法:

public boolean add(E e):向集合中添加元素,参数的类型和泛型一致.
返回值代表是否添加成功。

public E get(int index):从集合中获取元素,参数是索引编号,返回值是对应位置的元素

public E remove(int index):从集合中删除元素,参数是索引编号,返回值是被删除掉的元素

public int size():获取集合尺寸长度,返回值是集合中包含的元素个数

常用方法演示:

public class ArrayListDemo1 {
    public static void main(String[] args) {
//创建了一个ArrayList集合,集合名称是list,里面全部装的是String字符串类型的数据
        ArrayList<String> list=new ArrayList<>();
        //add()向集合中添加数据
        list.add("赵丽颖");
        list.add("高圆圆");
        list.add("赵又廷");
        list.add("刘亦菲");
        boolean flag=list.add("杨幂");
        System.out.println(list);//[赵丽颖, 高圆圆, 赵又廷, 刘亦菲, 杨幂]
        System.out.println("添加动作是否成功"+flag);//添加动作是否成功true
//从集合中获取元素,get(),索引值从0开始
        String name=list.get(2);
        System.out.println("第2号索引位置:"+name);//第2号索引位置:赵又廷
        //从集合中删除元素,remove(),索引值从0开始
        String whoremove=list.remove(1);
        System.out.println("被删除的是:"+whoremove);//被删除的是:高圆圆
        System.out.println(list);//[赵丽颖, 赵又廷, 刘亦菲, 杨幂]
        //获取集合尺寸长度
        int length=list.size();
        System.out.println("集合长度为:"+length);
    }
}

二、LinkedList

java.util.LinkedList集合 implements List接口

LinkedList集合的特点:

1、底层是一个链表结构:查询慢、增删快
2、里面包含了大量操作首尾元素的方法
注意:使用LinkedList集合特有的方法,不能使用多态

LinkedList集合常用方法:

public void addFirst(E e) 元素添加到头部。
public void addLast(E e) 元素添加到尾部。
public void push(E e) 将元素推入此列表所表示的堆栈
public E removeFirst() 删除并返回第一个元素。
public E removeLast() 删除并返回最后一个元素。
public E pop() 此次列表所表示的堆栈处弹出一个元素
public E getFirst() 返回第一个元素。
public E getLast() 返回最后一个元素。

常用方法演示:

public class LinkListDemo {
    public static void main(String[] args) {
       show01();
    }

    private static void show01() {
        LinkedList<String> sites = new LinkedList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Weibo");
        System.out.println(sites);
        // 使用 addFirst() 在头部添加元素
        sites.addFirst("Wiki");
        System.out.println(sites);
        // 使用 addLast() 在尾部添加元素
        sites.addLast("Wiki");
        System.out.println(sites);
        // 使用push(E e) 将元素推入此列表所表示的堆栈
        sites.push("aaa");
        System.out.println(sites);
        // 使用 getFirst() 获取头部元素
        System.out.println(sites.getFirst());
        // 使用 getLast() 获取尾部元素
        System.out.println(sites.getLast());
        // 使用 removeFirst() 移除头部元素
        sites.removeFirst();
        System.out.println(sites);
        // 使用 removeLast() 移除尾部元素
        sites.removeLast();
        System.out.println(sites);
        //pop() 此次列表所表示的堆栈处弹出一个元素
        System.out.println(sites.pop());
    }
}

[Google, Runoob, Taobao, Weibo]
[Wiki, Google, Runoob, Taobao, Weibo]
[Wiki, Google, Runoob, Taobao, Weibo, Wiki]
[aaa, Wiki, Google, Runoob, Taobao, Weibo, Wiki]
aaa
Wiki
[Wiki, Google, Runoob, Taobao, Weibo, Wiki]
[Wiki, Google, Runoob, Taobao, Weibo]
Wiki

三、ArrayList和LinkedList的区别

  • 数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。
  • 随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找。
  • 增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。
    内存空间占用:LinkedList 比 ArrayList 更占内存,因为 LinkedList 的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。
  • 线程安全:ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;

综合来说,在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList。

补充:数据结构基础之双向链表

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值