LinkedList 集合常用方法

本文详细介绍了Java中的LinkedList数据结构,包括其实例使用、底层原理图、模拟源码以及各种操作方法,如添加、删除、遍历等,并分析了JDK1.7/1.8版本的源码实现。

likedlist介绍:

Linked List 是 java.util 包中 Collection 框架的一部分。
LinkedList 数据结构的实现,它是一种线性数据结构,其中元素不存储在连续位置,每个元素都是一个单独的对象,具有数据部分和地址部分。
元素使用指针和地址链接。每个元素称为一个节点

一.实例使用

public class Test {
   
   
    //这是main方法,程序的入口
    public static void main(String[] args) {
   
   
        /*
        LinkedList常用方法:
        增加 addFirst(E e) addLast(E e)
             offer(E e) offerFirst(E e) offerLast(E e)
        删除 poll()
            pollFirst() pollLast()  ---》JDK1.6以后新出的方法,提高了代码的健壮性
            removeFirst() removeLast()
        修改
        查看 element()
             getFirst()  getLast()
             indexOf(Object o)   lastIndexOf(Object o)
             peek()
             peekFirst() peekLast()
        判断
         */
        //创建一个LinkedList集合对象:
        LinkedList<String> list = new LinkedList<>();
        list.add("aaaaa");
        list.add("bbbbb");
        list.add("ccccc");
        list.add("ddddd");
        list.add("eeeee");
        list.add("bbbbb");
        list.add("fffff");

        list.addFirst("jj");
        list.addLast("hh");

        list.offer("kk");//添加元素在尾端
        list.offerFirst("pp");
        list.offerLast("rr");
        System.out.println(list);//LinkedList可以添加重复数据
        System.out.println(list.poll());//删除头上的元素并且将元素输出
        System.out.println(list.pollFirst());
        System.out.println(list.pollLast());

        System.out.println(list.removeFirst());
        System.out.println(list.removeLast());
        System.out.println(list);//LinkedList可以添加重复数据

        /*list.clear();//清空集合
        System.out.println(list);*/
        /*System.out.println(list.pollFirst());*/
        /*System.out.println(list.removeFirst());报错:Exception in thread "main" java.util.NoSuchElementException*/


        //集合的遍历:
        System.out.println("---------------------");
        //普通for循环:
        for(int i = 0;i<list.size();i++){
   
   
            System.out.println(list.get(i));
        }
        System.out.println("---------------------");
        //增强for:
        for(String s:list){
   
   
            System.out.println(s);
        }
        System.out.println("---------------------");
        //迭代器:
        /*Iterator<String> it = list.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }*/
        //下面这种方式好,节省内存
        for(Iterator<String> it = list.iterator();it.hasNext();){
   
   
            System.out.println(it.next());
        }
    }
}

二、LinkedList简要底层原理图

在这里插入图片描述

三、模拟LinkedList源码

package com.lanson.test05;

/**
 * @author : lanson
 */
public class MyLinkedList {
   
   
    //链中一定有一个首节点:
    Node first;
    //链中一定有一个尾节点:
    Node last;
    //计数器:
    int count = 0;
    //提供一个构造器:
    public MyLinkedList(){
   
   

    }
//添加元素方法:
    public void add(Object o){
   
   
        if(first == null){
   
   //证明你添加的元素是第一个节点:
            //将添加的元素封装为一个Node对象:
            Node n = new Node();
            n.setPre(null);
            n.setObj(o);
            n.setNext(null);
            //当前链中第一个节点变为n
            first = n;
            //当前链中最后一个节点变为n
            last = n;
        }else{
   
   //证明已经不是链中第一个节点了
            //将添加的元素封装为一个Node对象:
            Nod
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值