您的位置:首页 > 其它

Hashtable&HashMap

2015-09-15 07:57 435 查看
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);


报错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: