hashmap和hashtable那个复杂
时间: 2023-11-01 11:43:08 浏览: 34
度更高?
HashMap和Hashtable的时间复杂度是相同的,都是O(1)的平均时间复杂度。但是它们的实现方式不同,导致了它们在一些操作上的性能差异。
HashMap是非线程安全的,它允许存储null键和null值,而且在大多数情况下,它的性能比Hashtable更好。但是,如果在多线程环境下使用HashMap,需要进行同步处理,否则可能会出现问题。
Hashtable是线程安全的,但是它不允许存储null键和null值,并且在大多数情况下,它的性能比HashMap差。Hashtable的同步处理会影响它的性能,所以在使用时需要注意。
因此,虽然它们的时间复杂度相同,但是在实际应用中,需要根据具体的场景选择合适的数据结构。
相关问题
hashtable,hashmap,treemap区别
哈希表(Hashtable)、哈希映射(Hashmap)和树映射(Treemap)都是常用的数据结构,它们的实现方式不同,各自有自己的优缺点和适用场景。
哈希表(Hashtable)是一种使用哈希函数实现的数据结构。它通过将关键字映射到哈希表的不同位置来实现快速查找。哈希表的优点是查询速度快,时间复杂度为O(1)。但是它的缺点是哈希函数的设计比较复杂,容易出现哈希冲突,需要解决冲突的方式,如拉链法、开放地址法等。
哈希映射(Hashmap)是基于哈希表实现的一种键值对存储结构。它是线程不安全的,支持null键和null值。HashMap的优点是查询速度快,时间复杂度为O(1),但是它的缺点是在并发环境下需要进行同步处理,否则会出现数据不一致的情况。
树映射(Treemap)是一种基于红黑树实现的键值对存储结构。它保证键值对的有序性,支持自定义排序规则,可以实现对键的范围查询。TreeMap的优点是查询速度比HashMap稍慢,但是它的键值对是有序的,支持更多的操作,如范围查询等。
综上所述,选择哈希表、哈希映射、树映射应根据具体的应用场景和数据特点来选择。如果需要快速查询且不需要排序,则可以选择哈希表或哈希映射;如果需要对键值对进行排序或范围查询,则可以选择树映射。
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 ); } } catch(Exception e ) {} } public void setView(WindowWord view) { this.view = view; } public void actionPerformed(ActionEvent e) { String englishWord = view.inputText.getText (); if(hashtable.containsKey(englishWord)) { String chineseWord = hashtable.get ( englishWord ); view.showText.setText ( chineseWord ); } else { view.showText.setText ("没有此单词"); } } }把这段代码完善一下,让它能实现汉语翻译为英语
可以在原有的 WordPolice 类中新增一个方法,用于将HashMap中的键值对反转,即将汉语作为键,英语作为值。同时,在 actionPerformed 方法中加入判断,如果输入的是中文,则调用新加的方法进行翻译。
完整代码如下:
```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.HashMap;
import java.util.Scanner;
public class WordPolice implements ActionListener {
WindowWord view;
HashMap<String,String> hashtable;
File file = new File("cet4.txt");
Scanner sc = null;
WordPolice () {
hashtable = new HashMap<String,String>();
try {
sc = new Scanner(file);
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;
}
}
view.showText.setText("没有此单词");
}
}
}
```
需要注意的是,此代码只能进行简单的单词翻译,无法处理词组、句子等复杂情况。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)