Pertanyaan Apa gunanya menambahkan kunci nol atau nilai ke HashMap di Java?


HashMap memungkinkan satu kunci nol dan sejumlah nilai nol. Apa gunanya itu?


75
2018-05-31 18:26


asal


Jawaban:


Saya tidak positif apa yang Anda tanyakan, tetapi jika Anda mencari contoh ketika seseorang ingin menggunakan kunci nol, saya sering menggunakannya dalam peta untuk mewakili kasus default (yaitu nilai yang harus digunakan jika kunci yang diberikan tidak ada):

Map<A, B> foo;
A search;
B val = foo.containsKey(search) ? foo.get(search) : foo.get(null);

HashMap menangani kunci null secara khusus (karena tidak dapat memanggil .hashCode() pada objek null), tetapi nilai nol bukanlah sesuatu yang istimewa, mereka disimpan di peta seperti yang lainnya


110
2018-05-31 18:32



Salah satu contohnya adalah untuk memodelkan pohon. Jika Anda menggunakan HashMap untuk mewakili struktur pohon, di mana kuncinya adalah induk dan nilainya adalah daftar anak-anak, maka nilai untuk null kunci akan menjadi simpul akar.


27
2018-03-15 20:04



Salah satu contoh penggunaan untuk null  nilai-nilai adalah saat menggunakan HashMap sebagai cache untuk hasil dari operasi yang mahal (seperti panggilan ke layanan web eksternal) yang dapat kembali null.

Menempatkan a null nilai dalam peta kemudian memungkinkan Anda untuk membedakan antara kasus di mana operasi belum dilakukan untuk kunci tertentu (cache.containsKey(someKey) kembali false), dan di mana operasi telah dilakukan tetapi mengembalikan a null nilai (cache.containsKey(someKey) kembali true, cache.get(someKey) kembali null).

Tanpa null nilai-nilai, Anda harus meletakkan nilai khusus di cache untuk menunjukkan null respons, atau hanya tidak cache respon yang sama sekali dan melakukan operasi setiap saat.


6
2018-06-16 09:35



Jawabannya sejauh ini hanya mempertimbangkan nilai memiliki null kunci, tetapi pertanyaan juga bertanya tentang any number of null values.

Manfaat menyimpan nilai null terhadap kunci dalam HashMap adalah sama seperti di database, dll - Anda dapat merekam perbedaan antara memiliki nilai yang kosong (misalnya string ""), dan tidak memiliki nilai sama sekali (null).


3
2018-06-16 08:14



Inilah satu-satunya contoh saya dibikin dari kasus di mana null kunci dapat bermanfaat:

public class Timer {
    private static final Logger LOG = Logger.getLogger(Timer.class);
    private static final Map<String, Long> START_TIMES = new HashMap<String, Long>();

    public static synchronized void start() {
        long now = System.currentTimeMillis();
        if (START_TIMES.containsKey(null)) {
            LOG.warn("Anonymous timer was started twice without being stopped; previous timer has run for " + (now - START_TIMES.get(null).longValue()) +"ms"); 
        }
        START_TIMES.put(null, now);
    }

    public static synchronized long stop() {
        if (! START_TIMES.containsKey(null)) {
            return 0;
        }

        return printTimer("Anonymous", START_TIMES.remove(null), System.currentTimeMillis());
    }

    public static synchronized void start(String name) {
        long now = System.currentTimeMillis();
        if (START_TIMES.containsKey(name)) {
            LOG.warn(name + " timer was started twice without being stopped; previous timer has run for " + (now - START_TIMES.get(name).longValue()) +"ms"); 
        }
        START_TIMES.put(name, now);
    }

    public static synchronized long stop(String name) {
        if (! START_TIMES.containsKey(name)) {
            return 0;
        }

        return printTimer(name, START_TIMES.remove(name), System.currentTimeMillis());
    }

    private static long printTimer(String name, long start, long end) {
        LOG.info(name + " timer ran for " + (end - start) + "ms");
        return end - start;
    }
}

2
2017-10-17 02:13



Contoh lain: Saya menggunakannya untuk mengelompokkan Data berdasarkan tanggal. Tetapi beberapa data tidak memiliki tanggal. Saya dapat mengelompokkannya dengan tajuk "NoDate"


1
2018-01-08 14:23



Kunci null juga dapat membantu ketika peta menyimpan data untuk pilihan UI di mana tombol peta mewakili bidang kacang.

Nilai bidang null yang sesuai misalnya akan direpresentasikan sebagai "(silakan pilih)" dalam pemilihan UI.


0
2017-11-08 10:08