Java LinkedHashMap 类:初学者友好指南

引言

你好,未来的 Java 大师们!今天,我们将踏上一段激动人心的旅程,深入了解 LinkedHashMap 的世界。如果你以前从未编写过一行代码,也不用担心 —— 我将作为你的友好向导,我们将一步一步地共同探讨这个主题。在本教程结束时,你会惊讶于自己学到了这么多!

Java - LinkedHashMap

LinkedHashMap 就像一个神奇的盒子,可以按照特定的顺序存储你的项目(在编程中我们称之为键值对)。想象一下你在书架上整理你最喜欢的书籍。你不仅可以快速找到任何你想要的书籍,而且还可以按照你添加它们的顺序或根据你阅读它们的频率来保持它们的顺序。这正是 LinkedHashMap 为我们的数据所做的!

类声明

让我们从如何在 Java 中声明一个 LinkedHashMap 开始:

import java.util.LinkedHashMap;

public class MyLinkedHashMapExample {
public static void main(String[] args) {
LinkedHashMap<String, Integer> myBookshelf = new LinkedHashMap<>();
}
}

在这个例子中,我们创建了一个名为 myBookshelf 的 LinkedHashMap。<String, Integer> 部分告诉 Java 我们将使用 String 类型的键(书名)和 Integer 类型的值(可能是页数)。如果现在这看起来很令人困惑,不用担心 —— 我们会在讲解过程中逐步分解它!

参数

在处理 LinkedHashMap 时,我们需要考虑几个参数:

  1. initialCapacity:这就像决定你的书架最初应该有多大。
  2. loadFactor:将其视为你的书架在需要更大书架之前可以有多满。
  3. accessOrder:这决定了你的书籍是按照添加的时间还是按照访问的频率来排列。

让我们看一个例子:

LinkedHashMap<String, Integer> myBookshelf = new LinkedHashMap<>(16, 0.75f, true);

在这里,我们说的是我们的初始书架可以容纳 16 本书,当它满了 75% 时,我们会考虑换一个更大的书架,并且我们希望根据访问的频率来排列书籍。

类构造函数

LinkedHashMap 提供了多种创建我们神奇书架的方式。以下是主要的构造函数:

  1. LinkedHashMap():创建一个具有默认设置的空 LinkedHashMap。
  2. LinkedHashMap(int initialCapacity):指定初始容量。
  3. LinkedHashMap(int initialCapacity, float loadFactor):指定初始容量和加载因子。
  4. LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder):指定所有三个参数。
  5. LinkedHashMap(Map<? extends K, ? extends V> m):创建一个具有与指定映射相同映射的 LinkedHashMap。

让我们尝试使用不同的构造函数创建 LinkedHashMap:

LinkedHashMap<String, Integer> shelf1 = new LinkedHashMap<>();
LinkedHashMap<String, Integer> shelf2 = new LinkedHashMap<>(20);
LinkedHashMap<String, Integer> shelf3 = new LinkedHashMap<>(20, 0.8f);
LinkedHashMap<String, Integer> shelf4 = new LinkedHashMap<>(20, 0.8f, true);

Map<String, Integer> existingMap = new HashMap<>();
existingMap.put("Java Basics", 200);
LinkedHashMap<String, Integer> shelf5 = new LinkedHashMap<>(existingMap);

这些根据我们的需要创建了一个略有不同的“书架”。Java 是不是很灵活?

类方法

现在,让我们看看 LinkedHashMap 中一些最常用的方法。我将以表格格式呈现它们,以便于参考:

方法 描述
put(K key, V value) 向 LinkedHashMap 添加一个新的键值对
get(Object key) 检索与指定键关联的值
remove(Object key) 删除指定键的映射
clear() 从 LinkedHashMap 中删除所有映射
size() 返回 LinkedHashMap 中的键值对数量
isEmpty() 如果 LinkedHashMap 为空,则返回 true
containsKey(Object key) 如果 LinkedHashMap 包含指定的键,则返回 true
containsValue(Object value) 如果 LinkedHashMap 包含指定的值,则返回 true
keySet() 返回 LinkedHashMap 中所有键的集合
values() 返回 LinkedHashMap 中所有值的集合
entrySet() 返回 LinkedHashMap 中所有键值对的集合

让我们看看这些方法的作用:

LinkedHashMap<String, Integer> myBookshelf = new LinkedHashMap<>();

// 向我们的书架添加书籍
myBookshelf.put("Java Basics", 200);
myBookshelf.put("Data Structures", 350);
myBookshelf.put("Algorithms", 400);

// 获取 "Java Basics" 的页数
int javaPages = myBookshelf.get("Java Basics");
System.out.println("Java Basics 有 " + javaPages + " 页。");

// 检查我们是否有关于 Python 的书
boolean hasPython = myBookshelf.containsKey("Python for Beginners");
System.out.println("我们有 Python 书吗? " + hasPython);

// 删除算法书
myBookshelf.remove("Algorithms");

// 打印所有书名
for (String title : myBookshelf.keySet()) {
System.out.println("书名: " + title);
}

这段代码演示了如何向我们的书架添加书籍,检索有关它们的信息,检查我们是否有某些书籍,删除书籍以及列出我们所有的书籍。很整洁,对吧?

继承的方法

LinkedHashMap 还从其父类继承了方法。以下是一些重要的方法:

继承自 方法
HashMap clone(), compute(), computeIfAbsent(), computeIfPresent(), merge()
AbstractMap equals(), hashCode(), toString()
Object finalize(), getClass(), notify(), notifyAll(), wait()

这些继承的方法提供了额外的功能,在某些情况下可能非常有用。

从 LinkedHashMap 获取值的示例

让我们用一个完整的例子来结束,这个例子包括创建一个 LinkedHashMap,添加一些值,并检索它们:

import java.util.LinkedHashMap;

public class BookshelfExample {
public static void main(String[] args) {
LinkedHashMap<String, Integer> myBookshelf = new LinkedHashMap<>();

// 向我们的书架添加书籍
myBookshelf.put("Java Basics", 200);
myBookshelf.put("Data Structures", 350);
myBookshelf.put("Algorithms", 400);

// 检索并打印每本书的信息
for (String title : myBookshelf.keySet()) {
int pages = myBookshelf.get(title);
System.out.println("书名 '" + title + "' 有 " + pages + " 页。");
}

// 获取特定的书
String bookToFind = "Data Structures";
if (myBookshelf.containsKey(bookToFind)) {
int pages = myBookshelf.get(bookToFind);
System.out.println("\n找到了! '" + bookToFind + "' 有 " + pages + " 页。");
} else {
System.out.println("\n抱歉,我们的书架上没有 '" + bookToFind + "'。");
}
}
}

输出

运行此代码时,你将看到类似于以下内容的输出:

书名 'Java Basics' 有 200 页。
书名 'Data Structures' 有 350 页。
书名 'Algorithms' 有 400 页。

找到了! 'Data Structures' 有 350 页。

就这样!你刚刚使用 LinkedHashMap 创建了你自己的数字书架。你可以添加书籍,找出它们有多少页,甚至检查特定的书是否在你的书架上。编程不是太神奇了吗?

记住,就像整理一个真正的书架一样,你越练习使用 LinkedHashMap,你就会越感到舒适。不要害怕实验和尝试不同的事情。编码愉快,未来的 Java 专家们!

Credits: Image by storyset