java中Hashtable和HashMap的区别分析
java中Hashtable和HashMap的区别分析,需要的朋友可以参考一下
1、Hashtable是Dictionary的子类,
代码如下:
public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable HashMap:
代码如下:
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
HashMap和Hashtable都是Map接口的一个实现类;
2、Hashtable中的方法是同步的(),而HashMap中的方法在默认情况下不是同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
代码如下:
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
这个方法返回一个同步的Map,也就是说返回的Map是线程安全的。需要注意的是,对返回的map进行迭代时,必须手动在返回的map上进行同步,否则将会导致不确定的行为:
代码如下:
Map m = Collections.synchronizedMap(new HashMap()); ... Set s = m.keySet(); // Needn't be in synchronized block ... synchronized(m) { // Synchronizing on m, not s! Iterator i = s.iterator(); // Must be in synchronized block while (i.hasNext()) foo(i.next()); }
3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。Hashtable的键值不能为null,否则:java.lang.NullPointerException 。
4.HashTable使用Enumeration,HashMap使用Iterator。
以上只是表面的不同,它们的实现也有很大的不同。
5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
代码如下:
int hash = key.hashCode(); int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模,比如HashMap的put方法:
代码如下:
public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null; }
代码如下:
static int hash(int h) { // This function ensures that hashCodes that differ only by // constant multiples at each bit position have a bounded // number of collisions (approximately 8 at default load factor). h ^= (h >>> 20) ^ (h >>> 12); return h ^ (h >>> 7) ^ (h >>> 4); }
代码如下:
static int indexFor(int h, int length) { return h & (length-1); }
Atas ialah kandungan terperinci java中Hashtable和HashMap的区别分析. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Mekanisme pengembangan peta hash adalah untuk mengira semula kapasiti dan menggantikan tatasusunan asal dengan tatasusunan baharu. Kira semula semua data tatasusunan asal dan masukkan tatasusunan baharu, kemudian tuding ke tatasusunan baharu jika tatasusunan telah mencapai nilai maksimum sebelum pengembangan kapasiti, tetapkan ambang terus kepada integer maksimum dan kembalikannya.

Cara memasukkan pasangan nilai kunci ke dalam HashMap menggunakan kaedah put() kelas HashMap ialah kelas yang sangat penting dalam rangka kerja pengumpulan Java. Ia menyediakan cara untuk menyimpan pasangan nilai kunci. Dalam pembangunan sebenar, kita selalunya perlu memasukkan pasangan nilai kunci ke dalam HashMap, yang boleh dicapai dengan mudah dengan menggunakan kaedah put() kelas HashMap. Tandatangan kaedah put() HashMap adalah seperti berikut: Vput(Kkey,Vvalue)

1. Jelaskan bahawa Map pada asasnya boleh menggunakan HashMap, tetapi HashMap mempunyai masalah, iaitu, susunan lelaran HashMap bukanlah susunan HashMap diletakkan, atau ia tidak teratur. Kekurangan HashMap ini sering menyebabkan masalah, kerana dalam sesetengah senario kami menjangkakan Peta tersusun, iaitu LinkedHashMap. 2. Contoh perbezaan publicstaticvoidmain(String[]args){Mapmap=newLinkedHashMap();map.put("apple","Apple");map.put("

Tafsiran dokumentasi Java: Penjelasan terperinci tentang penggunaan kaedah containsKey() bagi kelas HashMap Contoh kod khusus diperlukan. Kaedah containsKey() digunakan untuk menentukan sama ada HashMap mengandungi kunci yang ditentukan. Artikel ini akan menerangkan secara terperinci cara menggunakan kaedah containsKey() kelas HashMap dan memberikan contoh kod khusus. 1. samb

Memasukkan nilai kunci pendua dalam javaHashMap Untuk memasukkan nilai pendua dalam HashMap, anda perlu terlebih dahulu memikirkan cara elemen disimpan dalam HashMap. Setiap elemen yang disimpan dalam kaedah put Map ialah pasangan nilai kunci, dan semuanya ditambah melalui kaedah put, dan kunci yang sama hanya akan mempunyai satu nilai yang berkaitan dalam Peta. Kaedah meletakkan ditakrifkan seperti berikut dalam Peta. Pelaksanaan kaedah Vput(Kkey,Vvalue);put(): pertama cincang(kunci) mendapat kod cincang() kunci, dan peta cincang mencari rantai di mana kedudukan yang hendak dimasukkan adalah berdasarkan kod cincang yang diperolehi.

1. Apakah corak tunggal? Corak tunggal ialah corak penciptaan objek yang digunakan untuk menjana contoh tertentu objek Ia boleh memastikan bahawa hanya satu contoh kelas dalam sistem dijana. Singleton yang dilaksanakan dalam Java adalah dalam skop mesin maya Oleh kerana fungsi memuatkan kelas adalah milik mesin maya, mesin maya akan mencipta contoh kelas apabila ia memuatkan kelas tunggal melalui ClassLoadnya sendiri. Dalam bahasa Java, tingkah laku sedemikian boleh membawa dua faedah utama: 1. Untuk objek yang kerap digunakan, masa yang dihabiskan untuk mencipta objek boleh diabaikan, yang merupakan overhed sistem yang sangat besar untuk objek berwajaran berat tersebut 2. Sejak bilangan operasi baharu; dikurangkan, kekerapan penggunaan memori sistem juga akan dikurangkan, yang akan mengurangkan tekanan GC.

JavaMap ialah struktur data yang biasa digunakan dalam perpustakaan standard Java, yang menyimpan data dalam bentuk pasangan nilai kunci. Prestasi Map adalah penting untuk kecekapan menjalankan aplikasi Jika prestasi Map adalah lemah, ia boleh menyebabkan aplikasi berjalan perlahan atau ranap. 1. Pilih pelaksanaan Peta yang sesuai Java menyediakan pelbagai pelaksanaan Peta, termasuk HashMap, TreeMap dan LinkedHashMap. Setiap pelaksanaan Peta mempunyai kelebihan dan keburukan tersendiri Apabila memilih pelaksanaan Peta, anda perlu memilih pelaksanaan yang sesuai berdasarkan keperluan khusus aplikasi. HashMap: HashMap ialah pelaksanaan Peta yang paling biasa digunakan Ia menggunakan jadual cincang untuk menyimpan data dan mempunyai kelajuan pemasukan, pemadaman dan carian yang lebih pantas.

Java menggunakan fungsi putAll() kelas HashMap untuk menambahkan Map ke Map lain ialah struktur data yang biasa digunakan dalam Java dan digunakan untuk mewakili koleksi pasangan nilai kunci. Dalam rangka kerja pengumpulan Java, HashMap ialah kelas pelaksanaan yang biasa digunakan. Ia menyediakan fungsi putAll(), yang digunakan untuk menambah satu Peta ke Peta lain untuk memudahkan penggabungan dan penyalinan data. Artikel ini akan memperkenalkan cara menggunakan fungsi putAll() dan memberikan contoh kod yang sepadan. pertama,
