HashMap的用法

来源:互联网 发布:淘宝蓝海产品 编辑:程序博客网 时间:2024/04/28 03:38

一、HashMap的定义

         HashMap类实现了Map接口,由HashMap类实现的Map集合,允许以null作为键对象,但是因为键对象不可以重复,重复之后就覆盖,在HashMap中的对象是无序的。HashMap的映射关系,就像表中的字段跟值一样,可以把表的查询结果完全转换成HashMap散列表。

二、HashMap的相关方法

        Object put(K key,V value)
       向集合中添加指定值与指定键映射关系。


       putAll(Map m)
       将指定映射M的所有映射关系复制到此映射中,这些映射关系将替换此映射目前针对指定映射中所有键的所有映射关系。


       Object get(Object K)
       返回指定键在此标识哈希映射中所映射的值,如果存在指定的键对象则返回与该键对应的值对象;否则返null。


       void clear()
       移除集合中所有的映射关系。


       int size()
       返回集合中的键-值映射关系个数。


       int hashCode()
       返回调用映射的散列码。


       Object clone()
       返回此 HashMap 实例的浅表复制:并不克隆键和值本身。


       boolean equals(Object obj)
       如果obj是一个map并包含相同的映射,则返回true.


       boolean containsKey(Object K)
       如果映射中包含了作为键的K,则返回true。


       boolean containsValue(Object value)
       如果映射中包含了作为值的V,则返回true。


       Set > entrySet()
       返回此映射所包含的映射关系的 collection视图。


       boolean isEmpty()
       如果此映射不包含键-值映射关系,也就是说映射是空的,则返回true。


       Set keySet()
       返回此映射中所包含的键的set视图。


       remove(Object K)
       删除关键字等于K的映射关系。


       Collection values()
       返回此映射所包含的值的collection视图,也就是值的集合。

三、HashMap的一个例子


public static void main(String[] args)
{    
  HashMap hs=new HashMap();       
 hs.put("name", "张三");       
   hs.put("sex", "男");       
   hs.put("age", "30");       
  hs.put("home", "河北");    
  //测试是否包含关键字"name" 
   System.out.println(hs.containsKey("name"));//返回true 
 System.out.println(hs.get("name"));//返回  张三 
 System.out.println(hs.entrySet());//返回  [home=河北, sex=男, age=30, name=张三]  System.out.println(hs.hashCode()); //返回   7960688 
 System.out.println(hs.keySet()); //返回 [home, sex, age, name] 

}
 
 
//1 测试entrySet().的用法
Iterator it=hs.entrySet().iterator();//迭代程序  
while(it.hasNext())  
{      
 System.out.println(it.next());  
  }                  
    
 
//2 Set keySet()返回关键字各值的集合    
  it=hs.keySet().iterator();     
  while(it.hasNext())     
{      
  System.out.println(hs.get(it.next()));    
}                
//返回结果如下:  自己测试一下
      
 
//3 测试  values()的用法
it=hs.values().iterator();     
  while(it.hasNext())     
{      
System.out.println(it.next());     
  }                 
 //返回结果如下:    自己测试一下
  
}


四、HashMap与HashTable的区别

Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
  
  也许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。
  
  第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。
  
  一些资料建议,当需要同步时,用Hashtable,反之用HashMap。但是,因为在需要时,HashMap可以被同步,HashMap的功能比Hashtable的功能更多,而且它不是基于一个陈旧的类的,所以有人认为,在各种情况下,HashMap都优先于Hashtable。
  
  关于Properties
  有时侯,你可能想用一个hashtable来映射key的字符串到value的字符串。DOS、Windows和Unix中的环境字符串就有一些例子,如key的字符串PATH被映射到value的字符串C:\WINDOWS;C:\WINDOWS\SYSTEM。Hashtables是表示这些的一个简单的方法,但Java提供了另外一种方法。
  
  Java.util.Properties类是Hashtable的一个子类,设计用于String keys和values。Properties对象的用法同Hashtable的用法相象,但是类增加了两个节省时间的方法,你应该知道。
  
  Store()方法把一个Properties对象的内容以一种可读的形式保存到一个文件中。Load()方法正好相反,用来读取文件,并设定Properties对象来包含keys和values。
  
  注意,因为Properties扩展了Hashtable,你可以用超类的put()方法来添加不是String对象的keys和values。这是不可取的。另外,如果你将store()用于一个不包含String对象的Properties对象,store()将失败。作为put()和get()的替代,你应该用setProperty()和getProperty(),它们用String参数。

0 0
原创粉丝点击