Saya membuat kamus untuk menampilkan kunci hashtable.

import java.util.Dictionary;
import java.util.Enumeration;
import java.util.Hashtable;

public class Foo {
    public static void main (String [] args) {
         Dictionary<String, String> dict = new Hashtable<String, String>();
         dict.put("Emma", "Watson");
         dict.put("Tom", "Hanks");
         dict.put("Keanu", "Reeves");
    
         Enumeration<String> emu = dict.keys();
    
         while (emu.hasMoreElements()) {
              System.out.println(emu.nextElement());
         }
    }
}

Keluaran:

Keanu
Emma
Tom

Saya ingin output terdaftar sebagai urutan asli yang saya masukkan (Emma, ​​Tom, Keanu) tetapi itu mencetak urutan acak ini yang bahkan bukan abjad. Tolong bantu saya memahami bagaimana dan mengapa ini terjadi, dan bagaimana cara memperbaiki masalah

0
mry_02 8 Januari 2021, 03:44

3 jawaban

Jawaban Terbaik

Anda harus menggunakan LinkedHashMap<>, yang menggabungkan peta hash untuk akses cepat tetapi juga membuat elemen diurutkan berdasarkan urutan penyisipannya. Sebagai contoh

Map<String,String> dict = new LinkedHashMap<>();
dict.put("Emma", "Watson");
dict.put("Tom", "Hanks");
dict.put("Keanu", "Reeves");

for (String s : dict.keySet())
    System.out.println(s);

Ini akan menampilkan kunci dalam urutan di mana mereka dimasukkan ke dalam peta.

BTW, Dictionary, Hashtable dan kelas terkait sudah sangat tua dan digantikan oleh Map dan implementasinya.

4
Jim Garrison 8 Januari 2021, 01:13

Baca tentang kode hash dan yang setara. Koleksi hash hampir selalu berisi elemen dalam urutan acak (mungkin tanpa sesuatu seperti LinkedHashSet atau LinkedHashMap yang tetap memasukkan urutan tetapi ini adalah sesuatu yang lain). Mereka lebih cepat mendapatkan elemen dari posisi apa pun. Dalam masalah Anda, saya pikir Anda dapat membungkus String Anda ke dalam kelas baru seperti Nama dan menggunakan antarmuka Pembanding atau Sebanding untuk mengurutkannya. Atau cukup ubah Kamus ke HashTable dan dapatkan EntrySet:

public static void main (String [] args) {
    Hashtable<String, String> dict = new Hashtable<>();
    dict.put("Emma", "Watson");
    dict.put("Tom", "Hanks");
    dict.put("Keanu", "Reeves");

    for (Map.Entry<String, String> s : dict.entrySet()) {
        //ordered by entry
        System.out.println(s.getKey());
    }
} 
1
MrFisherman 8 Januari 2021, 01:19

Letakkan di hashtable lain dengan Hashtable , di mana int adalah urutannya dan string adalah kuncinya. lalu taruh hashtable di hashtable yang lebih besar sehingga hashtablenya adalah <, String>

0
Memeor 8 Januari 2021, 00:50