Rumah >Java >javaTutorial >Bagaimanakah saya boleh menyimpan berbilang nilai di bawah satu kunci dalam 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!