学习完ArrayList,就准备准备学习它兄弟LinkList了,它们是兄弟所以说有很多的方法是相同的。这样的目的是方便程序员记住它们,下面就让我们来看看它吧!

一篇文章让你精通:java集合讲解(二,ArrayList)

亲,可以先学习一下ArrayList再来比较它们区别

LinkList 

特点:采用双向链表的存储方式

优点:添加与删除元素时,效率高(前提是必须先低效率查询,如果插入与删除在头部或者尾部可以减少查询次数)

缺点:遍历元素与随机访问元素,效率低

注意:和ArrayList想比,不变的是方法名称与执行结果,变化的是底层的数据结构(数组为双向链表)与操作方式改变(如remove()方法:节点指向发生改变)

LinkList实现来List<>接口,还实现了Deque接口(说明LinkList,可以作为线性表,栈,队列来使用)。也说明方法比ArrayList的方法更多。

Linklist的方法

add()
 

末尾添加元素,

数组能自动装箱:就是数组封装。普通数据类型——>包装类

可以使用一个参数或者二个,一个时,添加元素,二个时,第一个参数:索引,第二个,添加元素

addAll(对象)

addAll(下标,对象)

复制添加对象全部元素,默认在后面添加

当有二个参数后,表示在下标后添加对象全部元素。

remove()

当输入的是对象时,删除对象,当输入的是对下标,删除下标,

el1.removeAll(el2)

在el1中删除el2中相同的元素。

list.retainAll(list2);

在list中查找与list2相同的元素

get()

获取指定索引,返回的是一个对象。

set(index,value) 

 二个参数,第一个为下标,第二个为修改值

clear()  

 清空数组

contains(value)

判断是否存在value值,返回布尔值

indexOf(value)

查找value的下标索引

isEmpty()

判断数组是否为空。

size()

查看数组中真实存储的元素个数。与数组的length()方法返回不同

toString()

遍历数组

import java.util.LinkedList;


public class Test {
    public static void main(String[] args)  {
        LinkedList<Integer> list=new  LinkedList();

        //增加
        list.add(1);
        list.add(2);
        list.add(2,100);
        //list.addAll();

        //删除
        list.remove(1);
        list.clear();

        list.add(1);
        list.add(2);

        //查看
        list.indexOf(1);
        list.size();
        int ele=list.get(1);
        System.out.println(ele);
        //修改
        list.add(2,100);
        //toString方法,遍历数组
        System.out.println(list.toString());
        //方法1,for循环
        for (int i = 0; i <list.size() ; i++) {
            int elem2= (int) list.get(i);
            System.out.println(i+"是"+elem2);
        }
        //方法2,for-each循环,必须使用对象输出
        for (Object elem3:list){
            System.out.println(elem3);
        }
        

        //方法4,Lambda表达式+流程式编程(JDK1.8提供)
        list.forEach((i)-> System.out.println(i));
//      list.forEach(System.out::println); 第二种写法




    }


}

Linklist的特有方法

addFirst

头添加

addLast

尾添加

getFirst()

获取元素

removeFirst()

头删除

removeFirst()

取出集合中元素

removeLast()

取出集合中元素,只不过是倒序输出

//添加方法--注意该方法为链表添加头结点,所以后面添加的为链表的头元素
        list.addFirst(20);
        list.addLast(30);


        //获取元素
        System.out.println(list.getFirst());

        //删除元素
        System.out.println(list.removeFirst());

        //取出LinkedList集合中所有元素
        while(!list.isEmpty()) {
            System.out.println(list.removeFirst());
            //link.removeLast()  倒序输出

        }

源码的了解

1.底层是一个双向链表。

2,有一个内部类Node,表示双向链表的节点。 

java List集合 stream Sum java list集合左连接_System

3.linklist的添加是尾部添加,知道元素的添加过程。

在什么情况下使用ArrayList与LinkList?

ArrayList:按照索引随机访问,遍历集合

LinkList:添加数据与删除数据多的情况下。