Java Linkedlist原理及实例详解

Java LinkedList原理及实例详解

什么是LinkedList

LinkedList是Java中的一个双向链表数据结构。双向链表数量级比较大时,性能好于ArrayList,但是在随机访问的情况下性能不如ArrayList。因为LinkedList内部存储元素的方式是基于链表节点的引用来存储,而不是基于数组下标的方式。

LinkedList的基本操作

创建LinkedList对象

创建LinkedList对象可以使用默认构造函数,也可以直接使用初始化器创建。

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

或者

LinkedList<Integer> linkedList = new LinkedList<>(Arrays.asList(1, 2, 3));

添加元素

LinkedList提供了两种添加元素的方法:add() 和 addFirst()。

linkedList.add("a");
linkedList.add(1);
linkedList.addFirst("First");

获取元素

获取LinkedList中的元素也提供了两种方式:get() 和 getFirst()。

String a = linkedList.get(1);
String first = linkedList.getFirst();

删除元素

LinkedList提供了三种删除元素的方式:remove()、removeFirst()和removeLast()。

linkedList.remove("a");
linkedList.removeFirst();
linkedList.removeLast();

修改元素

LinkedList中的元素可以使用set()方法进行修改。

linkedList.set(0, "newFirst");

LinkedList实例演示

实例一:用LinkedList实现队列

public class Queue<E> {
    private LinkedList<E> linkedList = new LinkedList<>();

    public void add(E element) {
        linkedList.add(element);
    }

    public E remove() {
        return linkedList.removeFirst();
    }

    public E peek() {
        return linkedList.getFirst();
    }

    public boolean isEmpty() {
        return linkedList.isEmpty();
    }
}

实例二:用LinkedList实现LRU Cache(Least Recently Used Cache)

public class LRUCache<K, V> {
    private final int MAX_CACHE_SIZE;
    private final float DEFAULT_LOAD_FACTOR = 0.75f;

    private LinkedHashMap<K, V> map;

    public LRUCache(int cacheSize) {
        MAX_CACHE_SIZE = cacheSize;
        int capacity = (int)Math.ceil(MAX_CACHE_SIZE / DEFAULT_LOAD_FACTOR) + 1;
        map = new LinkedHashMap<K, V>(capacity, DEFAULT_LOAD_FACTOR, true) {
            protected boolean removeEldestEntry(Map.Entry eldest) {
                return size() > MAX_CACHE_SIZE;
            }
        };
    }

    public synchronized V get(K key) {
        return map.get(key);
    }

    public synchronized void put(K key, V value) {
        map.put(key, value);
    }

    public synchronized void clear() {
        map.clear();
    }

    public synchronized int usedSize() {
        return map.size();
    }

    public void print() {
        for (Map.Entry<K, V> entry : map.entrySet()) {
            System.out.println(String.format("%s:%s", entry.getKey(), entry.getValue()));
        }
    }
}

以上就是Java LinkedList的原理及实例详解。

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

(0)
上一篇 2023年6月28日
下一篇 2023年6月28日

相关文章

  • Go语言的http/2服务器功能及客户端使用

    Go语言的http/2服务器功能及客户端使用 什么是HTTP/2 HTTP/2是HTTP协议的最新版本,它是先前HTTP/1.x版本的更新。HTTP/2在语法上很大程度上借鉴了SPDY的设计,是Google在2012年提出的一种协议,目标是提高现有HTTP/1.x版本的效率。 HTTP/2主要优势包括: 多路复用:通过在同一个连接上进行多个请求和响应而不是建…

    other 2023年6月25日
    00
  • Android ListView下拉刷新上拉自动加载更多DEMO示例

    下面是详细讲解“Android ListView下拉刷新上拉自动加载更多DEMO示例”的完整攻略。 1. 概述 在Android开发中,列表控件ListView是很重要的控件之一,常用于展示数据列表。而在列表数据较多且需要频繁更新数据的场景下,经常需要实现列表下拉刷新和上拉自动加载更多的功能。本文将介绍如何使用第三方库实现ListView的下拉刷新和上拉加载…

    other 2023年6月25日
    00
  • CAD怎么制作重合/垂直/水平以及相等约束?

    CAD(计算机辅助设计)软件可以帮助设计师创建和编辑二维和三维模型。在CAD中,约束是一种工具,用于控制和限制对象的位置和关系。下面是关于如何在CAD中创建重合、垂直、水平和相等约束的详细攻略: 1. 重合约束 重合约束用于将两个或多个对象的位置重合在一起。以下是在CAD中创建重合约束的步骤: 步骤 1:选择第一个对象。这可以是点、线、圆、多边形等。 步骤 …

    other 2023年7月28日
    00
  • chrome谷歌浏览器:您使用的是不受支持的命令行标记:–extensions-on-chrome-urls

    首先,这个命令行标记是指在Chrome浏览器中启用扩展程序管理器的URL,以便为您的扩展程序提供更多的访问和管理权限。但是,这个命令行标记在目前的Chrome版本中已经不受支持了,所以当您尝试使用该标记时,Chrome浏览器会提示“您使用的是不受支持的命令行标记:–extensions-on-chrome-urls”。 要解决这个问题,您可以尝试下面的解决…

    other 2023年6月26日
    00
  • openbabel的安装与使用

    什么是OpenBabel? OpenBabel是一种化学信息学工具,用于处理化学结构数据。它可以读取、写入和转换多种化学文件格式,如SMILES、MOLPDB等。OpenBabel还提供了一些学计算功能,如分子对齐、药物性质预测等。 OpenBabel的安装 OpenBabel可以在Windows、Linux和Mac OS X等操作系统上安装。以下是在Ubu…

    other 2023年5月7日
    00
  • Windows server部署DHCP服务的详细教程

    为了方便理解,我将这个问题分为以下四个部分: DHCP服务的概念介绍。 Windows Server部署DHCP服务的准备工作。 Windows Server部署DHCP服务的步骤详解。 示例说明。 DHCP服务的概念介绍 DHCP(Dynamic Host Configuration Protocol)即动态主机配置协议,是一个局域网络的网络协议。DHCP…

    other 2023年6月27日
    00
  • Oracle REGEXP_LIKE模糊查询用法例子

    Oracle REGEXP_LIKE模糊查询用法例子攻略 简介 Oracle数据库提供了REGEXP_LIKE函数,用于进行正则表达式的模糊查询。该函数可以帮助我们在数据库中进行更加灵活和精确的数据搜索。本攻略将详细介绍REGEXP_LIKE函数的用法,并提供两个示例说明。 语法 REGEXP_LIKE函数的基本语法如下: REGEXP_LIKE(colum…

    other 2023年8月19日
    00
  • C#组件FormDragger窗体拖拽器详解

    C#组件FormDragger窗体拖拽器详解 简介 FormDragger是一款适用于C# WinForm应用程序开发的拖拽组件,可以实现拖拽窗体的功能,提高用户体验。 安装 将FormDragger.dll文件添加到工程的引用中即可使用。 使用方法 在需要拖拽的窗口中添加FormDragger控件。可使用如下代码进行添加: csharp FormDragg…

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