HashMap与Hashtable都是属于Map集合类,两个用法是一样的,但是还是有区别的,下面用一个实例来看Map集合类是怎么使用的
1 /* 2 * 作者:白客C 3 * 时间:2020年03月02日 4 * 内容:HashMap的用法 5 */ 6 7 package com.beekc.www; 8 import javax.swing.*; 9 import java.util.*; 10 11 public class Beekc { 12 public static void main(String[] args) throws Exception { 13 //创建一个HashMap对象 14 HashMap hm = new HashMap(); 15 16 Emp emp1 = new Emp("000","白客C",1000f); 17 Emp emp2 = new Emp("001","小白",1200f); 18 Emp emp3 = new Emp("002","aaa",10000f); 19 20 //将emp放入到hm,通过000找到emp1 21 hm.put("000",emp1); 22 hm.put("001",emp2); 23 hm.put("002",emp3); 24 25 //查找 26 if(hm.containsKey("000")) 27 { 28 System.out.println("有该员工"); 29 //取出,键-值 30 Emp emp = (Emp)hm.get("000"); 31 System.out.println("名字:" + emp.getName()); 32 System.out.println("编号:" + emp.getEmpNo()); 33 System.out.println("薪水:" + emp.getSal() + "\n"); 34 }else{ 35 System.out.println("没有该员工"); 36 } 37 38 //遍历HasMap中所有的key和value 39 //Iterator迭代器 40 Iterator it = hm.keySet().iterator(); 41 42 //hasNext返回一个boolean值,判断是否有下一个 43 while (it.hasNext()) 44 { 45 //取出key 46 String key =it.next().toString(); 47 48 //通过key取出value 49 Emp emp = (Emp)hm.get(key); 50 System.out.println("名字:" + emp.getName()); 51 System.out.println("编号:" + emp.getEmpNo()); 52 System.out.println("薪水:" + emp.getSal()); 53 } 54 55 } 56 } 57 58 //雇员类 59 class Emp{ 60 //学号 61 private String empNo; 62 //姓名 63 private String name; 64 //薪水 65 private float sal; 66 67 //构造函数 68 public Emp(String empNo, String name, float sal) 69 { 70 this.empNo = empNo; 71 this.name = name; 72 this.sal = sal; 73 } 74 75 public String getEmpNo() { 76 return empNo; 77 } 78 79 public void setEmpNo(String empNo) { 80 this.empNo = empNo; 81 } 82 83 public String getName() { 84 return name; 85 } 86 87 public void setName(String name) { 88 this.name = name; 89 } 90 91 public float getSal() { 92 return sal; 93 } 94 95 public void setSal(float sal) { 96 this.sal = sal; 97 } 98 }
HashMap与Hashtable的区别
HashMap和Hashtable都是java的集合类,都可以用来放java对象,这是他们的相同点,但是他们也有区别:
Ⅰ.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
Ⅱ.同步性:Hashtable是同步的。这个类的一些方法保证了Hashtable中的对象是线程安全的。而HashMap则是异步的,因此HashMap中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。
Ⅲ.值:HashMap可以让你将空值作为一个条目的key或value,但是Hashtable是不能放入空值的(null)。