Rumah >Java >javaTutorial >Bagaimanakah saya boleh menyimpan berbilang nilai di bawah satu kunci dalam Java HashMap?

Bagaimanakah saya boleh menyimpan berbilang nilai di bawah satu kunci dalam Java HashMap?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-22 21:24:21801semak imbas

How can I store multiple values under a single key in a Java HashMap?

Menyimpan Berbilang Nilai di bawah Satu Kunci dalam HashMap

Maps dalam Java kekunci bersekutu dengan nilai tunggal, tetapi anda mungkin menghadapi keperluan untuk simpan berbilang nilai di bawah kunci yang sama. Soalan ini meneroka cara untuk mencapai kefungsian ini.

Peta dengan Senarai sebagai Nilai

Satu pendekatan ialah menggunakan peta yang nilainya ialah senarai. Ini membolehkan anda menyimpan berbilang nilai sebagai senarai yang dikaitkan dengan kunci. Walau bagaimanapun, ini mempunyai had bahawa senarai boleh mengandungi sebarang bilangan nilai, bukan hanya dua.

Menggunakan Kelas Pembungkus

Anda juga boleh membuat kelas pembungkus yang berasingan yang memegang nilai dan meletakkan contoh pembungkus ini dalam peta. Pendekatan ini memerlukan penentuan kelas dan mencipta kejadian untuk setiap kunci, menghasilkan kod tambahan.

Pendekatan Berasaskan Tuple

Jika anda ingin menguatkuasakan bilangan nilai tetap , anda boleh menggunakan kelas tuple (selalunya ditemui dalam perpustakaan atau dengan melaksanakan kelas anda sendiri). Peta kemudiannya boleh menyimpan tupel sebagai nilai, memastikan struktur yang konsisten untuk berbilang nilai di bawah kunci.

Berbilang Peta

Pilihan lain ialah menggunakan berbilang peta, satu untuk setiap nilai. Pendekatan ini mudah tetapi mungkin memperkenalkan risiko peta tidak segerak jika tidak dikendalikan dengan teliti.

Contoh

Peta dengan Senarai sebagai Nilai

import java.util.*;

class Person {
  String name;
  public Person(String name) { this.name = name;  }
  public String toString() { return this.name; }
}

class HashMapMultiple {

  public HashMapMultiple() {

    Map<String, List<Person>> peopleByForename = new HashMap<>();

    List<Person> people = new ArrayList<>();
    people.add(new Person("Bob Smith"));
    people.add(new Person("Bob Jones"));
    peopleByForename.put("Bob", people);

    List<Person> bobs = peopleByForename.get("Bob");
    Person bob1 = bobs.get(0);
    Person bob2 = bobs.get(1);

    System.out.println("Bob1: " + bob1);
    System.out.println("Bob2: " + bob2);
  }

  public static void main(String[] args) {
    new HashMapMultiple();
  }
}

Menggunakan Pembungkus Kelas

import java.util.*;

class Person { String name; public Person(String name) { this.name = name; } public String toString() { return this.name; } }

class Wrapper {
  public Wrapper(Person person1, Person person2) { this.person1 = person1; this.person2 = person2; }

  public Person getPerson1() { return this.person1; }
  public Person getPerson2() { return this.person2; }

  private Person person1;
  private Person person2;
}

class HashMapMultiple {

  public HashMapMultiple() {

    Map<String, Wrapper> peopleByForename = new HashMap<>();

    peopleByForename.put("Bob", new Wrapper(new Person("Bob Smith"), new Person("Bob Jones")));

    Wrapper bobs = peopleByForename.get("Bob");
    Person bob1 = bobs.getPerson1();
    Person bob2 = bobs.getPerson2();

    System.out.println("Bob1: " + bob1);
    System.out.println("Bob2: " + bob2);
  }

  public static void main(String[] args) {
    new HashMapMultiple();
  }
}

Pendekatan Berasaskan Tuple

Pendekatan ini memerlukan kelas tuple:

import java.util.*;

class Person { String name; public Person(String name) { this.name = name; } public String toString() { return this.name; } }

class Tuple2<T1,T2>  {
  public Tuple2(T1 val1, T2 val2) { this.val1 = val1; this.val2 = val2; }
  public T1 val1;
  public T2 val2;
}

class HashMapMultiple {

  public HashMapMultiple() {

    Map<String, Tuple2<Person, Person>> peopleByForename = new HashMap<>();

    peopleByForename.put("Bob", new Tuple2<Person, Person>(new Person("Bob Smith"), new Person("Bob Jones")));

    Tuple2<Person, Person> bobs = peopleByForename.get("Bob");
    Person bob1 = bobs.val1;
    Person bob2 = bobs.val2;

    System.out.println("Bob1: " + bob1);
    System.out.println("Bob2: " + bob2);
  }

  public static void main(String[] args) {
    new HashMapMultiple();
  }
}

Peta Berbilang

import java.util.*;

class Person { String name; public Person(String name) { this.name = name; } public String toString() { return this.name; } }

class HashMapMultiple {

  public HashMapMultiple() {

    Map<String, Person> firstPersonByForename = new HashMap<>();
    Map<String, Person> secondPersonByForename = new HashMap<>();

    firstPersonByForename.put("Bob", new Person("Bob Smith"));
    secondPersonByForename.put("Bob", new Person("Bob Jones"));

    Person bob1 = firstPersonByForename.get("Bob");
    Person bob2 = secondPersonByForename.get("Bob");

    System.out.println("Bob1: " + bob1);
    System.out.println("Bob2: " + bob2);
  }

  public static void main(String[] args) {
    new HashMapMultiple();
  }
}

Atas ialah kandungan terperinci Bagaimanakah saya boleh menyimpan berbilang nilai di bawah satu kunci dalam Java HashMap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn