Java Linkedlist原理及实例详解

yizhihongxing

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日

相关文章

  • jquery.hover()函数详解

    以下是jQuery hover()函数详解的完整攻略,包含两个示例说明: hover()函数概述 jQuery hover()函数用于在鼠标悬停在一个元素上时触发一个或多个事件。它接受两个函数作为参数,第一个函数用于处理鼠标进入事件,第二个函数用于处理鼠标离开事件。 hover()函数语法 以下是hover()函数的语法: $(selector).hover…

    other 2023年5月9日
    00
  • 使用Python的库qrcode生成二维码

    使用Python的库qrcode生成二维码 在现代生活中,二维码已经成为了一种非常流行的信息交换方式。我们可以通过扫描二维码来获取各种信息,例如地址、联系方式和电子邮件地址等。那么,如何在Python代码中生成二维码呢?答案是使用Python的库qrcode。 安装qrcode库 首先,我们需要安装qrcode库。可以使用pip来进行安装: pip inst…

    其他 2023年3月28日
    00
  • java中synchronized的用法详解(四种用法)

    Java中synchronized的用法详解(四种用法) 在Java中,线程的同步性是非常重要的。在多线程编程的过程中,我们需要保证一些共享资源不会同时被多个线程修改或访问。这就需要使用Java的同步机制,其中最重要的就是synchronized。 synchronized关键字可以用于不同的用途,包括方法级别的同步、块级别的同步、静态方法级别的同步以及类级…

    其他 2023年3月28日
    00
  • docker容器无法执行vim的解决方案

    当在Docker容器中使用vim时,可能会出现无法正常执行的情况。这通常是由于缺少vim依赖或Docker容器中没有vim软件包导致的。以下是解决此问题的完整攻略: 步骤1:检查vim软件包是否已安装 首先,需要检查vim软件包是否已安装。您可以使用以下命令在Docker容器中检查vim软件包是否已安装: dpkg -l vim 如果已经安装,则应该看到类似…

    other 2023年6月26日
    00
  • Docker+selenium实现自动化健康报备的方法

    标题: Docker+selenium实现自动化健康报备攻略 1. 背景介绍 健康报备现在已经成为了很多单位和个人的重要任务,而每天手动进行报备,不仅麻烦,而且还容易出现漏报等问题。于是,许多人开始尝试使用自动化工具来实现健康报备的自动提交。其中,Docker+selenium成为了一种比较常用的组合。 2. Docker+selenium的基本原理 Doc…

    other 2023年6月27日
    00
  • Word2010文档内容控件的巧妙使用介绍

    Word2010 文档内容控件的巧妙使用介绍 什么是 Word2010 文档内容控件? Word2010 文档内容控件是 Word 内置的一种可插入的控件,在不需要编写代码的前提下,使得用户能够在文档中添加一些用户交互式的控件,比如下拉列表,复选框等。 如何插入 Word2010 文档内容控件? 步骤一 在 Word 文档中,单击”开发工具”选项卡,然后在”…

    other 2023年6月27日
    00
  • latex中怎么设定图片在指定位置

    Latex中怎么设定图片在指定位置 在写论文或者书籍的时候,经常需要插入一些图片。而有时候我们需要把图片放在具体的位置。那么在Latex中怎么做呢?本篇文章将会给出一些解决方法。 解决方法 Latex提供了一些命令来控制图片的位置。我们可以通过使用\begin{figure}[位置选项]来控制图片的位置。位置选项可以有h、t、b、p、!这五个,分别表示以下含…

    其他 2023年3月28日
    00
  • C语言超详细讲解轮转数组

    C语言轮转数组的完整攻略 背景 轮转数组(也叫环形数组)是一种将数组元素循环移动的处理方式。它通常用于解决一些需要对固定长度的数组进行循环滚动处理的问题,例如字符串移位、碰撞检测等。 本文将介绍C语言中轮转数组的使用方法,包括定义、初始化、遍历、插入、删除、倒置等操作。 定义与初始化 定义一个轮转数组需要指定它的长度和元素类型,例如定义一个长度为10的整数轮…

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