Hashtable&HashMap

本文详细介绍了Java中HashMap和Hashtable的区别,包括它们的历史原因、同步性、值存储等特性,并通过实例代码展示了如何使用这两个集合类。重点强调了HashMap的非同步性和允许空值的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package project1;
import java.util.*;
public class JavaSet {
    public static void main(String args[]){
        //ArrayList al=new ArrayList();
        //ArrayList中的数据类型都是Object类型的,而所有的类都是Object的子类,所以都可以存到ArrayList中
        HashMap hm =new HashMap();
        Clerk c1=new Clerk("宋江");
        Clerk c2=new Clerk("林冲");
        hm.put("c1",c1);
        hm.put("c2",c2);
        //1、HashMap中不能重复放同一个键这样后一个键的键值会冲掉前一个键的键值
        //2、使用迭代器来遍历整个key集合,然后通过HashMap的get方法获得对应的键值
        //3、迭代器中放的是Object类型的,需要转化成相应的类型的。hm中的键值也是Object类型的需要转换成相应的类型
        Iterator it=hm.keySet().iterator();
        while(it.hasNext()){
            String tempKey=(String)it.next();
            Clerk temp=(Clerk)hm.get(tempKey);
            System.out.println(temp.getName());
        }
//        for(int i=0;i<al.size();i++){
//            Clerk temp=(Clerk)al.get(i);
// 由于ArrayList中的数据都是Object的类型的,所以还需要将其强制转换成Clerk类型的
//            System.out.println(temp.getName());
//        }
    }
}
class Clerk{
    private String name;

    public Clerk(String name){
        this.name=name;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
两者之间的差别:
相同点:HashMap和Hashtable都是java的集合类,都可以用来存放java对象
不同点:

 1. 历史原因
     Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现
 2.同步性:
     Hashtable是同步的,这个类中额一些方法保证了Hashtale中的对象是线程安全的,而HashMap是异步的,因此HashMap中的对象不是线程安全的.因为同步的要求会影响执行的效率(因为每次执行的时候都要因为照顾同步性,而去查询现在是否有其他的人在执行这个程序或者在对这个变量进行操作),所以在不需要线程安全的集合时,那么使用HashMap是一个很好的选择,这样会避免由于同步带来的不必要的性能开销,从而提高开发效率。
 3.值:HashMap可以让你将空值作为一个表的条目的Key或者Value,但是Hashtable是不能存放空值的(null)

HashMap hm =new HashMap();
hm.put(null,null);
System.out.println(hm.get(null));
console output:null     正确

Hashtable ht=new Hashtable();
ht.put(null,null);
System.out.println(ht.get(null));
console output:

Exception in thread "main" java.lang.NullPointerException
at java.util.Hashtable.put(Unknown Source)
at project1.JavaSet.main(JavaSet.java:13);

报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值