it-swarm-id.com

Sortasi hashmap berdasarkan kunci

Saya memiliki hashmap berikut di Jawa:

{B046 = 0.0, A061 = 3.0, A071 = 0.0, B085 = 0.0, B075 = 3.0, B076 = 9.0, B086 = 3.0, B095 = 0.0, B096 = 0.0, A052 = 0.0, B066 = 0.0, B066 = 0.0, B056 = 9.0, B065 = 0,0, B055 = 9,0}

Bagaimana saya harus menyortir hashmap sedemikian rupa sehingga Alphabet, diikuti oleh angka-angka numerik diperhitungkan?

Hashmap yang dihasilkan akan terlihat seperti ini:

{A052 = 0.0, A061 = 3.0, A071 = 0.0, B046 = 0.0, B055 = 9.0, B056 = 9.0, B065 = 0.0, B066 = 0.0, B075 = 3.0, B076 = 9.0, B085 = 0.0, B086 = 3.0, B095 = 3.0, B095 = 0,0, B096 = 0,0}

Hargai bantuannya!

69
user1008697

Gunakan TreeMap yang diurutkan:

Map<String, Float> map = new TreeMap<>(yourMap);

Secara otomatis akan menempatkan entri diurutkan berdasarkan kunci. Saya pikir pemesanan String alami akan baik-baik saja dalam kasus Anda.

Perhatikan bahwa HashMap karena optimasi pencarian tidak mempertahankan pesanan.

206

Gunakan TreeMap dengan komparator khusus.

class MyComparator implements Comparator<String>
    {
        public int compare(String o1,String o2)
        {
            // Your logic for comparing the key strings
        }
    }

TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());

Saat Anda menambahkan elemen baru, mereka akan diurutkan secara otomatis.

Dalam kasus Anda, bahkan mungkin tidak perlu menerapkan pembanding karena pemesanan String mungkin cukup. Tetapi jika Anda ingin menerapkan kasus khusus, seperti huruf kecil muncul sebelum huruf besar, atau memperlakukan angka dengan cara tertentu, gunakan komparator.

23
Kal

TreeMap adalah taruhan terbaik Anda untuk penyortiran semacam ini (Alami). TreeMap secara alami mengurutkan sesuai kunci.

HashMap tidak mempertahankan urutan penyisipan atau mengurutkan peta. LinkedHashMap menjaga urutan penyisipan tetapi tidak mengurutkan peta secara otomatis. Hanya TreeMap di antarmuka Map yang mengurutkan peta berdasarkan urutan alami (Angka pertama, huruf besar kedua, huruf kecil terakhir).

10
Roshnal

Gunakan TreeMap , meskipun memiliki peta "terlihat seperti itu" agak kabur - Anda juga bisa hanya mengurutkan kunci berdasarkan kriteria Anda dan beralih ke peta, mengambil setiap objek.

5
Dave Newton

Menggunakan TreeMap Anda dapat mengurutkan Peta.

Map<String, String> map = new HashMap<String, String>();        
Map<String, String> treeMap = new TreeMap<String, String>(map);
//show hashmap after the sort
for (String str : treeMap.keySet()) {
    System.out.println(str);
}

Cukup gunakan TreeMap. Ini mengimplementasikan antarmuka SortedMap, dan dengan demikian secara otomatis mengurutkan kunci yang dikandungnya. Kunci Anda hanya bisa disortir berdasarkan abjad untuk mendapatkan hasil yang diinginkan, sehingga Anda bahkan tidak perlu menyediakan pembanding.

HashMaps tidak pernah diurutkan. Satu-satunya hal yang dapat Anda lakukan dengan HashMap adalah mendapatkan semua kunci, dan menyimpannya dalam set yang diurutkan atau dalam Daftar dan mengurutkan Daftar.

3
JB Nizet

Anda dapat menggunakan TreeMap yang akan menyimpan nilai dalam bentuk yang diurutkan. 

Map <String, String> map = new TreeMap <String, String>();
3

TreeMap akan secara otomatis mengurutkan dalam urutan menaik. Jika Anda ingin mengurutkan dalam urutan menurun, gunakan kode berikut:

Salin kode di bawah ini di dalam kelas Anda dan di luar metode eksekusi utama:

static class DescOrder implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {      
        return o2.compareTo(o1);
    }
    }

Kemudian dalam logika Anda:

TreeMap<String, String> map = new TreeMap<String, String>(new DescOrder());
map.put("A", "test1");
map.put("C", "test3");
map.put("E", "test5");
map.put("B", "test2");
map.put("D", "test4");
0
JavaGeek