Java中Hashtable和Synchronized Map的区别
HashTable是一个紧凑的抽象数据集,它通过计算映射键到数组槽中的索引来将映射的键转换为值,从而实现更快的數據访问。另一方面,同步映射是一个Java集合类,主要用于同步特定映射以使其成为线程安全的集合,并可以应用于整个对象。该映射不包含任何空值。
输入
[ ARB, RDD, KOL, DHKA ]
输出
Insertion Order of objects in HashTable : [ ARB, RDD, KOL, DHKA ] Insertion Order of objects in Synchronized Map : [ ARB, RDD, DHKA, KOL ]
使用的方法
使用对象级同步
算法
在这个算法中,我们声明了一些函数,通过考虑一组值来执行数组列表中的插入顺序。此外,通过使用循环进行迭代,我们将设置长度遍历的时间。
步骤 1 − 开始进程。
步骤 2 − 声明输入输出流。
步骤 3 − 导入内置类和声明的函数。
步骤 4 − 声明一个公共类。
步骤 5 − 设置函数。
步骤 6 − 进行插入顺序操作。
步骤 7 − 声明一个数组列表并填充它。
步骤 8 − 声明集合值。
步骤 9 − 按插入方式打印值。
步骤 10 − 声明一个循环来迭代该过程。
步骤 11 − 设置计时器值。
步骤 12 − 运行进程并获取输出值。
步骤 13 − 终止进程。
语法
该语法将首先检查具有某些整数值的树集。之后,我们将声明一个映射集,以从这些元素创建一些身份对,以便使用hasNext()根据它们的状态对其进行过滤。
TreeSet < Integer > STTREE = new TreeSet <> () ;
STTREE . add ( 4 ) ;
STTREE . add ( 5 ) ;
STTREE . add ( 6 ) ;
STTREE . add ( 8 ) ;
STTREE . add ( 4 ) ;
IdentityHashMap < Integer, String > ihmap
= new IdentityHashMap < Integer, String > () ;
ihmap . put ( 10, "ARB" ) ;
ihmap . put ( 20, "RDD" ) ;
ihmap . put ( 30, "ARBRDD" ) ;
ihmap . put ( 40, "KOLDHKA" ) ;
ihmap . put ( 50, "You" ) ;
PRINT THE VALUE HERE ( " IdentityHashMap size : " + ihmap . size () ) ;
PRINT THE VALUE HERE ( " Initial identity hash map : " + ihmap ) ;
Hashtable < Integer, String > table
= new Hashtable < Integer, String > () ;
table . put ( 1 , "X" ) ;
table . put ( 2 , "Y" ) ;
table . put ( 3, "Z" ) ;
table . put ( 4, "A" ) ;
for ( Map . Entry m : table . entrySet () )
Iterator < IdentityHashMap . Entry < Integer, String > >
itr = ihmap . entrySet () . iterator () ;
while ( itr . hasNext () ) {
IdentityHashMap . Entry < Integer, String > entry
= itr . next ( ) ;
TreeMap < Integer,Integer > MAPTREE
= new TreeMap <> () ;
MAPTREE . put ( 2,5 ) ;
MAPTREE . put ( 3,6 ) ;
MAPTREE . put ( 4,6 ) ;
MAPTREE . put ( 2,3 ) ;
}
Hashtable和Synchronized Map的区别
HashTable |
Synchronized Map |
|---|---|
HashTable使用表格存储数据。 |
此结构使线程能够在并发访问时保持其安全性。 |
元素以任意方式排序。 |
它遵循手动同步,错误率低。 |
它在恒定时间范围内工作。 |
一个与API友好的过程,具有性能开销。 |
HashTable是一个同步过程,用于通过提供线程安全性来实现map接口,但这会带来潜在的处理成本。另一方面,SynchronizedMap使用继承的内置结构包装现有的map类,以确保运行线程的安全性。
使用对象级同步方法
在这种方法中,我们使用set接口使用了对象级同步过程。当用户想要在一个类的给定实例上执行特定块时,对象级同步就是一个过程。
示例
在示例1(A)中,我们输入了一些数据元素作为整数和字符串,以使用getKey()和getValue()函数将它们同步到映射中。
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;
import java.util.*;
public class ARBRDD{
public static void main ( String args [] ){
HashMap < Integer, String > hmap = new HashMap < Integer, String > () ;
hmap . put ( 2, "A" ) ;
hmap . put ( 44, "R" ) ;
hmap . put ( 1, "B" ) ;
hmap . put ( 4, "RDD" ) ;
hmap . put ( 88, "XYZ" ) ;
Map map = Collections . synchronizedMap ( hmap ) ;
Set set = map . entrySet () ;
synchronized ( map ){
Iterator i = set . iterator () ;
while ( i . hasNext () ){
Map . Entry me = ( Map .Entry ) i . next () ;
System.out.print ( me . getKey () + ": " ) ;
System.out.println ( me . getValue () ) ;
}
}
}
}
输出
1: B 2: A 4: RDD 88: XYZ 44: R
结论
因此,在本文中,我们尝试区分HashTable和Synchronized Map在不同参数下的可能区别。为了保持高水平的数据一致性,我们只能使用同步映射。虽然在这种情况下不推荐使用哈希表,因为它是一个遗留类。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP