Java8集合深入解析:Hashtable的实现机制

需积分: 10 2 下载量 182 浏览量 更新于2024-09-11 收藏 347KB PDF 举报
"尚硅谷的Java高级编程教程深入解析了Java8的集合框架,特别是关于Hashtable的实现原理。该教程适合初学者,采用生动的教学方式,覆盖了Java8至Java11的新特性,并在Eclipse和IDEA环境中进行实践。课程内容深入全面,包括数据结构、设计模式和JVM内存结构等。此外,提供了丰富的实战项目和面试题,以增强实际操作能力。" 在Java集合框架中,`Hashtable`是一个早期的线程安全的哈希表实现,虽然现在使用较少,但理解其工作原理仍然有价值。`Hashtable`通过在所有公共方法上使用`synchronized`关键字确保线程安全,但这也带来了性能上的牺牲,因为在单线程环境下并不需要这样的同步机制。 `Hashtable`的属性相对简单,主要包括以下几点: 1. `table`:这是一个私有的、不可变的`Entry<?,?>`数组,用于存储键值对。 2. `count`:记录哈希表中的键值对数量。 3. `threshold`:扩容的阈值,当元素数量达到这个值时会触发扩容。 4. `loadFactor`:负载因子,决定了哈希表在多满时需要扩容。 构造方法中,`Hashtable`允许指定初始容量`initialCapacity`和负载因子`loadFactor`。如果容量小于0或者负载因子不合法(小于等于0或非数字),会抛出异常。如果初始容量为0,则设置为1。负载因子乘以初始容量得到扩容阈值,并限制不超过`MAX_ARRAY_SIZE+1`。 除了构造方法,`Hashtable`还包含许多其他方法,如`put`、`get`、`remove`等,这些方法都是线程安全的。`put`方法会在哈希表中插入键值对,`get`用于查找指定键对应的值,而`remove`则用于删除键值对。这些操作都需要同步,确保在多线程环境下正确执行。 `Hashtable`虽然在现代Java开发中使用不多,但其线程安全的实现方式和基本操作对于理解并发编程和集合框架的工作原理依然有重要意义。学习这部分内容有助于开发者在需要保证线程安全的场景下选择合适的数据结构。

package 作业5; import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.; import java.io.File; import java.util.HashMap; import java.util.Scanner; import java.io.File; import java.util.HashMap; import java.util.Scanner; public class Example13_7{ public static void main( String args []){ WindowWord win = new WindowWord(); win.setTitle("英﹣汉小字典"); } } class WindowWord extends JFrame{ JTextField inputText,showText; WordPolice police; public WindowWord(){ setLayout(new FlowLayout()); inputText = new JTextField(6); showText = new JTextField(6); showText.setColumns(15); add(inputText); add(showText); police = new WordPolice(); police.setView(this); inputText.addActionListener(police); setBounds(100,100,400,280); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } class WordPolice implements ActionListener { WindowWord view; HashMap<String,String>hashtable; File file = new File ("E:\JAVA\上机\作业5\cet4.txt"); Scanner sc = null ; WordPolice () { hashtable = new HashMap< String,String >(); //System.out.println(hashtable.size()); try { sc = new Scanner ( file ); //System.out.println(sc); while (sc.hasNext ()) { String englishWord = sc . next (); String chineseWord = sc . next (); hashtable . put ( englishWord , chineseWord ); } HashMap<String,String> reversedHashtable = new HashMap<String,String>(); for (String key : hashtable.keySet()) { String value = hashtable.get(key); reversedHashtable.put(value, key); } hashtable.putAll(reversedHashtable); } catch(Exception e ) {} } public void setView(WindowWord view) { this.view = view; } public void actionPerformed(ActionEvent e) { String inputWord = view.inputText.getText (); if(hashtable.containsKey(inputWord)) { String outputWord = hashtable.get ( inputWord ); view.showText.setText (outputWord ); } else { String chineseWord = inputWord; for (String key : hashtable.keySet()) { String value = hashtable.get(key); if (value.equals(chineseWord)) { view.showText.setText(key); return; } } for (String value : hashtable.values()) { if (value.equals(inputWord)) { String outputWord = hashtable.get(value); view.showText.setText(outputWord); return; } } view.showText.setText ("没有此单词"); } } }我在输入框输入“书”,但结果是没有此单词,但是输入“book”,结果是“n.书,书籍”,如何解决,我想实现输入“书”,查出 book n.书;书籍;著作集;选集;簿册;

2023-05-24 上传