Java 9+
ใน Java 9 คุณสามารถเขียน: Map.entry(key, value)
 เพื่อสร้างคู่ที่ไม่เปลี่ยนรูปได้
หมายเหตุ:วิธีนี้ไม่อนุญาตให้ใช้คีย์หรือค่าเป็นโมฆะ หากคุณต้องการที่จะให้ค่า null Map.entry(key, Optional.ofNullable(value))ตัวอย่างเช่นคุณต้องการที่จะเปลี่ยนนี้ไปที่:
Java 8+
ใน Java 8 คุณสามารถใช้วัตถุประสงค์ทั่วไปมากขึ้นjavafx.util.Pairเพื่อสร้างคู่ที่ไม่เปลี่ยนรูปแบบและไม่เปลี่ยนแปลง คลาสนี้อนุญาตให้ใช้คีย์ที่ไม่มีค่าและค่าว่าง (ใน Java 9 คลาสนี้รวมอยู่ในjavafx.baseโมดูล) แก้ไข: ตั้งแต่วันที่ Java 11, JavaFX ได้รับการแยกออกจาก JDK ดังนั้นคุณต้องมีสิ่งประดิษฐ์ maven เพิ่มเติม org.openjfx: javafx-base
Java 6+
ใน Java 6 และสูงกว่าคุณสามารถใช้ verbose เพิ่มเติมAbstractMap.SimpleImmutableEntryสำหรับคู่ที่ไม่เปลี่ยนรูปหรือAbstractMap.SimpleEntryสำหรับคู่ที่สามารถเปลี่ยนค่าได้ คลาสเหล่านี้ยังอนุญาตให้มีคีย์ Null และค่า Null และสามารถจัดลำดับได้
Android
หากคุณกำลังเขียนสำหรับ Android เพียงใช้Pair.create(key, value)เพื่อสร้างคู่ที่ไม่เปลี่ยนรูป
Apache Commons
Apache Commons Langให้ประโยชน์Pair.of(key, value)ในการสร้างคู่ที่ไม่เปลี่ยนรูปเทียบเคียงและเทียบเคียงได้
Eclipse Collections
หากคุณกำลังใช้คู่ที่มีการดึกดำบรรพ์Eclipse Collectionsมีคลาสการจับคู่แบบดั้งเดิมที่มีประสิทธิภาพมากซึ่งจะช่วยหลีกเลี่ยงการชกมวยอัตโนมัติที่ไม่มีประสิทธิภาพและการยกเลิกการทำกล่องอัตโนมัติ
ตัวอย่างเช่นคุณสามารถใช้PrimitiveTuples.pair(int, int)ในการสร้างIntIntPairหรือการสร้างPrimitiveTuples.pair(float, long)FloatLongPair
โครงการลอมบอก
การใช้โปรเจ็กต์ลอมบอกคุณสามารถสร้างคลาสคู่ที่ไม่เปลี่ยนรูปได้ง่ายๆโดยการเขียน:
@Value
public class Pair<K, V> {
    K key;
    V value;
}
ลอมบอกจะเติมในตัวสร้าง, getters ที่equals(), hashCode()และtoString()วิธีการให้คุณโดยอัตโนมัติใน bytecode สร้าง หากคุณต้องการวิธีการที่โรงงานคงแทนนวกรรมิกเช่นเป็นเพียงแค่เปลี่ยนคำอธิบายประกอบเพื่อ:Pair.of(k, v)@Value(staticConstructor = "of")
มิฉะนั้น
หากไม่มีวิธีแก้ไขปัญหาข้างต้นลอยเรือของคุณคุณสามารถคัดลอกและวางรหัสต่อไปนี้ (ซึ่งแตกต่างจากชั้นเรียนที่ระบุไว้ในคำตอบที่ได้รับการยอมรับป้องกัน NullPointerExceptions):
import java.util.Objects;
public class Pair<K, V> {
    public final K key;
    public final V value;
    public Pair(K key, V value) {
        this.key = key;
        this.value = value;
    }
    public boolean equals(Object o) {
        return o instanceof Pair && Objects.equals(key, ((Pair<?,?>)o).key) && Objects.equals(value, ((Pair<?,?>)o).value);
    }
    public int hashCode() {
        return 31 * Objects.hashCode(key) + Objects.hashCode(value);
    }
    public String toString() {
        return key + "=" + value;
    }
}