HashMap<K, V>泛型类

来源:互联网 发布:mysql insert触发器 编辑:程序博客网 时间:2024/05/22 00:40

HashMap<K, V>也是一个很实用的类,HashMap<K, V>对象采用散列表这种数据结构存储数据,习惯上称HashMap<K, V>对象为散列映射对象。散列映射用于存储键值数据对,允许把任何数量的键值数据对存储在一起。键不可以发生逻辑冲突,两个数据项不要使用相同的键,如果出现两个数据项对应相同的键,那么先前散列映射中的键值对将被替换。散列映射在它需要更多的存储空间时会自动增大容量。例如,如果散列映射的装载因子是0.75,那么当散列映射的容量被使用了75%时,它就把容量增加到原来容量的2倍。对于数组和链表这两种数据结构,如果要查找它们存储的某个特定的元素却不知道它的位置,就需要从头开始访问元素直到找到匹配的为止;如果数据结构中包含很多的元素,就会浪费时间。这时最好使用散列映射来存储要查找的数据,使用散列映射可以减少检索的开销。

1、HashMap<K, V>对象

HashMap<K, V>泛型类创建的对象称为散列映射。例如:

HashMap<String, Student> hashtable = HashMap<String, Student>();

那么,hashtable 就可以存储键值对数据,其中的键必须是一个String对象,键对应的值必须是Student对象。hashtable可以调用public V put(K key, V value)方法将键值对数据存储放到散列映射中,同时返回键所对应的值。

2、常用方法

HashMap<K, V>  泛型类的常用方法如下。

①public void clear() —— 清空散列映射

②public Object clone() —— 返回当前散列映射的一个克隆

③public boolean containsKey(Object key) —— 如果散列映射有键值对使用了参数指定的键,方法返回true,否则返回false

④public boolean containsValue(Object value) —— 如果散列映射有键值对的值是参数指定的值,方法返回true,否则返回false

⑤public V get(Object key) —— 返回散列映射中使用key作为键的键值对的值

⑥public boolean isEmpty() —— 如果散列映射不含任何键值对,方法返回true,否则返回false

⑦public V remove(Object key) —— 删除散列映射中键为参数指定的键值对,并返回键对应的值

⑧public int size() —— 返回散列映射的大小,即散列映射中键值对的数目

3、遍历散列映射

如果想获得散列映射中所有键值对中的值,首先使用

public Collection<V> values()

方法返回一个实现Collection<V>接口类创建的对象的引用,并要求将该对象的引用返回到Collection<V>接口变量中。values()方法返回的对象中存储了散列映射中所有键值对中的值,这样接口变量就可以调用类实现的方法,如获取Iterator对象,然后输出所有的值。

 

例:使用散列映射的常用方法,并遍历散列映射

[java] view plaincopy
  1. package com.chindroid.date;  
  2.   
  3. import java.util.Collection;  
  4. import java.util.HashMap;  
  5. import java.util.Iterator;  
  6.   
  7. public class TestHashMap {  
  8.   
  9.     public static void main(String[] args) {  
  10.         Book book1 = new Book("7302033218""C++基础教程");  
  11.         Book book2 = new Book("7808315162""Java编程语言");  
  12.         Book book3 = new Book("7302054991""J2ME无线设备编程");  
  13.           
  14.         HashMap<String, Book> table = new HashMap<String, Book>();  
  15.         table.put(book1.ISBN, book1);  
  16.         table.put(book2.ISBN, book2);  
  17.         table.put(book3.ISBN, book3);  
  18.           
  19.         String key = "7808315162";  
  20.         if(table.containsKey(key)){  
  21.             System.out.println(table.get(key).name + "有货");  
  22.         }  
  23.           
  24.         Book b = table.get("7302054991");  
  25.         System.out.println("书名:"+b.name+", ISBN:"+b.ISBN);  
  26.           
  27.         int number = table.size();  
  28.         System.out.println("散列映射中有"+number+"个元素:");  
  29.           
  30.         Collection<Book> collection = table.values();  
  31.         Iterator<Book> iter = collection.iterator();  
  32.         while(iter.hasNext()){  
  33.             Book te = iter.next();  
  34.             System.out.printf("书名:%s, ISBN: %s\n", te.name, te.ISBN);  
  35.         }  
  36.     }  
  37. }  


程序运行结果如下

Java编程语言有货
书名:J2ME无线设备编程, ISBN:7302054991
散列映射中有3个元素:
书名:C++基础教程, ISBN: 7302033218
书名:J2ME无线设备编程, ISBN: 7302054991
书名:Java编程语言, ISBN: 7808315162

 

4、HashMap<E>泛型类实现的接口

HashMap<E>泛型类实现了泛型接口Map<E>,其中的绝大部分方法都是Map<E>接口方法的实现。编程时,可以使用接口回调技术,即把HashMap<E>对象的引用赋值给Map<E>接口变量,那么接口就可以调用类实现的接口方法。

0 0
原创粉丝点击