java LinkedList类详解及实例代码

Java LinkedList 类详解及实例代码

介绍

Java中的LinkedList类是一个双向链表的实现,是List接口的有序集合。LinkedList类提供了方便的操作链表的方法,可以很容易地实现添加、删除、插入以及访问节点等操作。

以下是创建一个LinkedList的示例:

LinkedList<String> linkedList = new LinkedList<String>();

常用方法

以下是一些常用的LinkedList方法:

  1. add(E e) - 在链表末尾添加一个元素
  2. add(int index, E element)- 在链表指定位置添加一个元素
  3. remove() - 删除链表的头元素
  4. remove(int index) - 删除链表中指定位置的元素
  5. get(int index) - 返回链表中指定位置的元素
  6. size() - 返回链表中元素的数量
  7. clear() - 删除链表中的所有元素

以下是示例代码:

LinkedList<String> linkedList = new LinkedList<String>();
linkedList.add("Java");
linkedList.add("Python");
linkedList.add("JavaScript");
linkedList.add("PHP");

//获取链表的元素数
System.out.println("链表元素数量:" + linkedList.size());

//获取链表中指定位置的元素
System.out.println("链表第二个元素:" + linkedList.get(1));

//在链表指定位置添加一个元素
linkedList.add(1, "C++");

//删除链表末尾的元素
linkedList.removeLast();

输出结果:

链表元素数量:4
链表第二个元素:Python

示例说明

示例1 - 使用LinkedList实现LRU Cache

以下示例展示了使用LinkedList实现LRU Cache。

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

class LRUCache {

    private Map<Integer, Integer> cache; //用来存储缓存的键值对
    private LinkedList<Integer> list; //用来存储缓存的键
    private int capacity; //LRU Cache的容量

    public LRUCache(int capacity) {
        this.capacity = capacity;
        cache = new HashMap<Integer, Integer>();
        list = new LinkedList<Integer>();
    }

    public int get(int key) {
        if(cache.containsKey(key)) {
            //将键移动到链表头部
            list.remove((Integer)key);
            list.addFirst(key);
            return cache.get(key);
        } else {
            return -1;
        }
    }

    public void put(int key, int value) {
        if(cache.containsKey(key)) {
            list.remove((Integer)key);
        } else {
            if(cache.size() == capacity) {
                int lastKey = list.removeLast();
                cache.remove(lastKey);
            }
        }
        list.addFirst(key);
        cache.put(key, value);
    }
}

以上代码实现了LRU Cache的基本功能,包括了缓存容量的限制、查找缓存、添加缓存等操作。

示例2 - 使用LinkedList实现栈

以下示例展示了使用LinkedList实现栈。

import java.util.LinkedList;

class Stack<T> {

    private LinkedList<T> list; //用来存储栈中的元素

    public Stack() {
        list = new LinkedList<T>();
    }

    //将一个元素压入栈顶
    public void push(T data) {
        list.addFirst(data);
    }

    //从栈顶弹出一个元素
    public T pop() {
        if(list.isEmpty()) {
            return null;
        } else {
            return list.removeFirst();
        }
    }

    //返回栈顶的元素,但不弹出
    public T peek() {
        if(list.isEmpty()) {
            return null;
        } else {
            return list.getFirst();
        }
    }

    //判断栈是否为空
    public boolean isEmpty() {
        return list.isEmpty();
    }
}

以上代码实现了栈的基本功能,包括了压入元素、弹出元素、判断栈是否为空等操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java LinkedList类详解及实例代码 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Java BigDecimal基础用法详解

    Java BigDecimal基础用法详解 什么是BigDecimal Java中的float和double类型是不能精确表示十进制数的,这对于很多需要精确计算的场景是不适用的。而BigDecimal是Java提供的一个可以精确表示任意大小和精度的十进制数类。 常用构造方法 BigDecimal(double val):通过一个Double类型的值来构造Bi…

    Java 2023年5月26日
    00
  • 高分面试分析jvm如何实现多态

    针对“高分面试分析jvm如何实现多态”的问题,我们可以采用以下步骤进行解答: 1. 简要介绍多态的概念 多态是面向对象程序设计中的一个重要概念,它指的是在运行时确定对象类型,而非编译时确定类型。在多态的实现过程中,一个对象根据不同的上下文环境表现出不同的行为,实现了代码的灵活性和可扩展性。在Java中,多态的实现至少需要使用到继承、虚函数(也称为动态绑定或者…

    Java 2023年5月26日
    00
  • Java面向对象编程的三大特征

    Java面向对象编程的三大特征分别是封装、继承和多态。下面分别来详细讲解: 封装 封装是面向对象编程的一个非常重要的特征,它是指将数据和方法结合起来,形成一个独立的整体,对外部隐藏对象内部的实现细节。在Java中,通过访问修饰符(public、private、protected)来实现封装。 示例1:下面的代码展示了一个简单的Java类,它使用封装来隐藏内部…

    Java 2023年5月26日
    00
  • Java 爬虫如何爬取需要登录的网站

    下面是我对Java爬虫如何爬取需要登录的网站的完整攻略: 一、背景介绍 有些网站需要用户登录后才能查看或获取相应数据,这对于一些需要批量获取数据的需求来说显得很麻烦。本文将介绍一种在Java中使用爬虫爬取需要登录的网站的方法,以及需要注意的一些细节。 二、分析 首先,我们需要了解需要登录的网站是如何实现用户认证,以及需要爬取的数据是如何在网站上呈现的。 一般…

    Java 2023年5月26日
    00
  • MyBatis 核心配置文件及映射文件详解

    来详细讲解一下“MyBatis 核心配置文件及映射文件详解”的攻略。 MyBatis 核心配置文件 MyBatis 核心配置文件是 MyBatis 使用的基本配置文件,用于配置数据库连接、事务管理等基本信息。下面是 MyBatis 核心配置文件的配置选项: 属性配置 MyBatis 核心配置文件的属性配置包括以下信息: environment(必须配置):设…

    Java 2023年5月20日
    00
  • Spring Security添加验证码的两种方式小结

    下面详细讲解如何给Spring Security添加验证码的两种方式: 方式1:自定义验证码过滤器 首先创建一个实现javax.servlet.Filter接口的验证码过滤器类VerifyCodeFilter,并在其中生成并输出验证码图片。示例代码: public class VerifyCodeFilter extends OncePerRequestFi…

    Java 2023年5月20日
    00
  • Java内存溢出的几个区域总结(注意避坑!)

    Java内存溢出的几个区域总结(注意避坑!) 在Java应用程序中,如何管理和控制内存使用是非常重要的。Java虚拟机管理内存的方式不同于C++或其他语言,因为Java虚拟机使用堆区域来分配内存,并且具有垃圾回收机制。然而,这些不同也使得Java应用程序容易遭遇内存溢出错误。在这篇文章中,我们将概述Java中主要的内存区域,如何避免内存泄漏和内存溢出错误。 …

    Java 2023年5月27日
    00
  • 关于idea中Java Web项目的访问路径问题

    在IDEA中创建Java Web项目时,访问路径是一个重要的问题,不同的访问路径会影响项目的正常运行,因此需要认真了解和设置访问路径。本攻略将从以下几个方面详细讲解Java Web项目的访问路径问题,其中包含两个示例说明: 认识Java Web项目的访问路径 Java Web项目的访问路径指的是浏览器通过URL地址来访问Web应用程序所使用的路径。在Java…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部