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日

相关文章

  • 详解Qt使用QImage类实现图像基本操作

    详解Qt使用QImage类实现图像基本操作攻略 1. 前言 在Qt中,我们可以使用QImage类来实现图像基本操作,如加载、保存、绘制以及一些简单的处理。本篇攻略将详细讲解QImage类的使用方法。 2. QImage的加载与保存 QImage类提供了多种加载和保存图像的方法,下面介绍两种常用的方法。 2.1 加载图像 使用QImage::load()方法可…

    other 2023年6月26日
    00
  • js的三种继承方式详解

    下面我将详细讲解 JavaScript 的三种继承方式。 1. 原型继承 原型继承是 JavaScript 中最基本的继承方式,它实现的原理是通过使用 prototype 属性。在原型继承中,子类的原型对象指向父类的实例对象,从而实现继承。 以下是一个实现原型继承的示例代码: function Person(name, age) { this.name = …

    other 2023年6月26日
    00
  • markdown在表格中换行

    markdown在表格中换行 在编写文档时,表格是一个非常重要的元素,它被广泛应用于各种场合。而markdown作为一种流行的轻量级标记语言,也提供了表格的支持。但是,在markdown中,如果要在表格中换行,需要注意几个细节。 表格中的普通换行 在markdown表格中,如果要换行,可以使用行尾的两个空格+回车的方式实现。例如: | 列1 | 列2 | |…

    其他 2023年3月28日
    00
  • Android实现可折叠式标题栏

    Android实现可折叠式标题栏攻略 1. 添加依赖库 首先,我们需要在项目的build.gradle文件中添加以下依赖库: implementation ‘com.google.android.material:material:1.4.0’ 这将使我们能够使用Material Design组件库中的相关功能。 2. 创建布局文件 接下来,我们需要创建一个…

    other 2023年8月20日
    00
  • #define中 #与##用法

    Pycharm的项目文件名是红色的原因及解决办法的完整攻略 Pycharm是一款流行的Python集成开发环境,可以用于开发Python应用程序。在使用Pycharm时,有时会发现项目文件名是红色的,这是为什么呢?本文将为您提供Pycharm项目文件名红色的原因及解决办法的完整攻略,并提供两个示例说明。 原因 Pycharm项目文件名是红色的原因是因为该文件…

    other 2023年5月5日
    00
  • Vue加载中动画组件使用方法详解

    Vue加载中动画组件是一种可以用来增强用户交互体验的组件。这个组件一般是在数据加载的时候使用,可以让用户知道此时正在加载数据,不会让用户误以为程序崩溃或者卡住了。本篇攻略将详细讲解Vue加载中动画组件的使用方法。 1. 安装和引入 首先我们需要安装该组件。在命令行中输入: npm install vue-loading-overlay –save 成功之后…

    other 2023年6月25日
    00
  • Android中使用ScrollView实现滑动到底部显示加载更多

    当在Android应用中需要实现滑动到底部时加载更多数据的功能时,可以使用ScrollView来实现。下面是使用ScrollView实现滑动到底部加载更多的完整攻略: 首先,在XML布局文件中定义一个ScrollView,并在其中添加一个垂直方向的线性布局(LinearLayout)作为ScrollView的子视图。这个线性布局将用于显示所有的数据项。 &l…

    other 2023年8月25日
    00
  • JS+Canvas实现自定义头像功能

    JS+Canvas实现自定义头像功能需要以下步骤: 步骤一:创建画布元素 首先,需要在页面中创建一个canvas标签作为画布元素。可以通过以下HTML代码进行创建: <canvas id="canvas" width="200" height="200"></canvas> …

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