在 Java 编程中使用键值对

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

Pairs(键值对)是一种存储成对数据的方式,包含两个字段——一个用于键(key),另一个用于值(value)。在 Java 中,Pairs 是从方法中返回多个值的绝佳方式。Java 中有多种使用 Pairs 的方法。本实验将通过代码示例,逐步指导你如何在 Java 中使用 Pairs。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/BasicSyntaxGroup(["`Basic Syntax`"]) java(("`Java`")) -.-> java/DataStructuresGroup(["`Data Structures`"]) java(("`Java`")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["`Object-Oriented and Advanced Concepts`"]) java(("`Java`")) -.-> java/FileandIOManagementGroup(["`File and I/O Management`"]) java(("`Java`")) -.-> java/ConcurrentandNetworkProgrammingGroup(["`Concurrent and Network Programming`"]) java/BasicSyntaxGroup -.-> java/output("`Output`") java/DataStructuresGroup -.-> java/arrays("`Arrays`") java/DataStructuresGroup -.-> java/collections_methods("`Collections Methods`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("`Classes/Objects`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/class_methods("`Class Methods`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/constructors("`Constructors`") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/generics("`Generics`") java/FileandIOManagementGroup -.-> java/io("`IO`") java/ConcurrentandNetworkProgrammingGroup -.-> java/working("`Working`") subgraph Lab Skills java/output -.-> lab-117976{{"`在 Java 编程中使用键值对`"}} java/arrays -.-> lab-117976{{"`在 Java 编程中使用键值对`"}} java/collections_methods -.-> lab-117976{{"`在 Java 编程中使用键值对`"}} java/classes_objects -.-> lab-117976{{"`在 Java 编程中使用键值对`"}} java/class_methods -.-> lab-117976{{"`在 Java 编程中使用键值对`"}} java/constructors -.-> lab-117976{{"`在 Java 编程中使用键值对`"}} java/generics -.-> lab-117976{{"`在 Java 编程中使用键值对`"}} java/io -.-> lab-117976{{"`在 Java 编程中使用键值对`"}} java/working -.-> lab-117976{{"`在 Java 编程中使用键值对`"}} end

创建 Java 类

使用以下命令创建一个新的 Java 类:

cd ~/project && touch PairsInJava.java

实现 JavaFX.Util 包中的 Pair 类

JavaFX 提供了一个内置的 Pair 类,可用于处理键值对。在这一步中,我们将学习如何使用 Pair 类来创建和操作键值对。将以下代码添加到你的 PairsInJava.java 文件中:

import javafx.util.Pair;

public class PairsInJava {
    public static void main(String[] args) {
        Pair<String, Integer> p1 = new Pair<>("apple", 1);
        Pair<String, Integer> p2 = new Pair<>("banana", 2);
        System.out.println("p1=" + p1.toString());
        System.out.println("p2=" + p2.toString());
        System.out.println("key of p1=" + p1.getKey());
        System.out.println("value of p1=" + p1.getValue());
    }
}

在上面的代码中,我们使用 Pair 类创建了两个键值对,然后分别打印了每个键值对的 keyvalue

要编译并运行代码,请执行以下命令:

javac PairsInJava.java && java PairsInJava

使用对象数组实现 Java 中的键值对

在这一步中,我们将学习如何使用对象数组在 Java 中创建键值对。将以下代码添加到你的 PairsInJava.java 文件中:

public class PairsInJava {
    public static void main(String[] args) {
        Object[] p1 = {"apple", 1};
        Object[] p2 = {"banana", 2};
        System.out.println("p1=" + p1[0] + "," + p1[1]);
        System.out.println("p2=" + p2[0] + "," + p2[1]);
    }
}

在上面的代码中,我们使用对象数组创建了两个键值对,然后分别打印了每个键值对的 keyvalue

要编译并运行代码,请执行以下命令:

javac PairsInJava.java && java PairsInJava

实现自定义的 Pair 类

在这一步中,我们将学习如何实现一个自定义的 Pair 类来在 Java 中创建键值对。将以下代码添加到你的 PairsInJava.java 文件中:

class MyPair<T1, T2> {
    private T1 key;
    private T2 value;

    public MyPair(T1 key, T2 value) {
        this.key = key;
        this.value = value;
    }

    public T1 getKey() {
        return key;
    }

    public T2 getValue() {
        return value;
    }

    public void setKey(T1 key) {
        this.key = key;
    }

    public void setValue(T2 value) {
        this.value = value;
    }
}

public class PairsInJava {
    public static void main(String[] args) {
        MyPair<String, Integer> p1 = new MyPair<>("apple", 1);
        MyPair<String, Integer> p2 = new MyPair<>("banana", 2);
        System.out.println("p1=" + p1.getKey() + "," + p1.getValue());
        System.out.println("p2=" + p2.getKey() + "," + p2.getValue());
    }
}

在上面的代码中,我们定义了一个自定义类 MyPair 来创建键值对,然后分别打印了每个键值对的 keyvalue

要编译并运行代码,请执行以下命令:

javac PairsInJava.java && java PairsInJava

实现 AbstractMap.SimpleEntry 类

在这一步中,我们将学习如何使用 AbstractMap.SimpleEntry 类创建键值对。将以下代码添加到你的 PairsInJava.java 文件中:

import java.util.AbstractMap;

public class PairsInJava {
    public static void main(String[] args) {
        AbstractMap.SimpleEntry<String, Integer> p1 = new AbstractMap.SimpleEntry<>("apple", 1);
        System.out.println("p1=" + p1.getKey() + "," + p1.getValue());
        p1.setValue(2);
        System.out.println("new p1=" + p1.getKey() + "," + p1.getValue());
    }
}

在上面的代码中,我们使用 AbstractMap.SimpleEntry 类创建了一个键值对,并修改了它的值。

要编译并运行代码,请执行以下命令:

javac PairsInJava.java && java PairsInJava

实现 AbstractMap.SimpleImmutableEntry 类

在这一步中,我们将学习如何使用 AbstractMap.SimpleImmutableEntry 类创建一个不可变的键值对。将以下代码添加到你的 PairsInJava.java 文件中:

import java.util.AbstractMap;

public class PairsInJava {
    public static void main(String[] args) {
        AbstractMap.SimpleImmutableEntry<String, Integer> p1 = new AbstractMap.SimpleImmutableEntry<>("apple", 1);
        System.out.println("p1=" + p1.getKey() + "," + p1.getValue());
        // 无法设置值
        // p1.setValue(2);
    }
}

在上面的代码中,我们使用 AbstractMap.SimpleImmutableEntry 类创建了一个不可变的键值对。一旦初始化后,我们无法修改它的 keyvalue

要编译并运行代码,请执行以下命令:

javac PairsInJava.java && java PairsInJava

实现 javatuples 的 Pair 类

在这一步中,我们将学习如何使用 javatuples 库中的 Pair 类来创建键值对。将以下代码添加到你的 PairsInJava.java 文件中:

import org.javatuples.Pair;

public class PairsInJava {
    public static void main(String[] args) {
        Pair<String, Integer> p1 = Pair.with("apple", 1);
        Pair<String, Integer> p2 = Pair.with("banana", 2);
        System.out.println("p1=" + p1.getValue0() + "," + p1.getValue1());
        System.out.println("p2=" + p2.getValue0() + "," + p2.getValue1());
    }
}

在上面的代码中,我们使用 javatuples 库中的 Pair 类来创建并打印每个键值对的 keyvalue

要编译并运行代码,请执行以下命令:

javac -cp .:javatuples-1.2.jar PairsInJava.java && java -cp .:javatuples-1.2.jar PairsInJava

实现 Vavr 库的 Tuple2 类

在这一步中,我们将学习如何使用 Vavr 库中的 Tuple2 类来创建键值对。将以下代码添加到你的 PairsInJava.java 文件中:

import io.vavr.Tuple2;

public class PairsInJava {
    public static void main(String[] args) {
        Tuple2<String, Integer> p1 = new Tuple2<>("apple", 1);
        System.out.println("p1=" + p1._1() + "," + p1._2());
    }
}

在上面的代码中,我们使用 Vavr 库中的 Tuple2 类来创建并打印一个键值对的 keyvalue

要编译并运行代码,请执行以下命令:

javac -cp .:vavr-0.10.3.jar PairsInJava.java && java -cp .:vavr-0.10.3.jar PairsInJava

实现 Apache Commons 库

在这一步中,我们将学习如何使用 Apache Commons 库中的 MutablePairImmutablePair 类来创建和操作键值对。将以下代码添加到你的 PairsInJava.java 文件中:

import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.MutablePair;

public class PairsInJava {
    public static void main(String[] args) {
        MutablePair<String, Integer> p1 = new MutablePair<>("apple", 1);
        ImmutablePair<String, Integer> p2 = new ImmutablePair<>("banana", 2);

        System.out.println("p1=" + p1.getLeft() + "," + p1.getRight());
        System.out.println("p2=" + p2.getLeft() + "," + p2.getRight());

        p1.setLeft("orange");
        p1.setRight(3);

        System.out.println("new p1=" + p1.getLeft() + "," + p1.getRight());

        // 无法为不可变键值对设置值
        // p2.setLeft("kiwi");

        p2 = p2.withLeft("kiwi");

        System.out.println("new p2=" + p2.getLeft() + "," + p2.getRight());
    }
}

在上面的代码中,我们使用 Apache Commons 库中的 MutablePairImmutablePair 类来创建键值对,并修改它们的 keyvalue

要编译并运行代码,请执行以下命令:

javac -cp .:commons-lang3-3.13.0.jar PairsInJava.java && java -cp .:commons-lang3-3.13.0.jar PairsInJava

总结

键值对是一种简单的方式来存储两个具有映射关系的数据项。在本实验中,我们使用了不同的类和方法来实现 Java 中的键值对。一些常见的方式包括使用外部库(如 Apache Commons 或 Vavr 库)、使用内置的 JavaFX Pair 类、创建自定义的键值对类以及使用对象数组。

您可能感兴趣的其他 Java 教程