首页 > 代码库 > HashMap<K, V>泛型类

HashMap<K, V>泛型类

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对象,然后输出所有的值。

 

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

 

package com.chindroid.date;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;

public class TestHashMap {

	public static void main(String[] args) {
		Book book1 = new Book("7302033218", "C++基础教程");
		Book book2 = new Book("7808315162", "Java编程语言");
		Book book3 = new Book("7302054991", "J2ME无线设备编程");
		
		HashMap<String, Book> table = new HashMap<String, Book>();
		table.put(book1.ISBN, book1);
		table.put(book2.ISBN, book2);
		table.put(book3.ISBN, book3);
		
		String key = "7808315162";
		if(table.containsKey(key)){
			System.out.println(table.get(key).name + "有货");
		}
		
		Book b = table.get("7302054991");
		System.out.println("书名:"+b.name+", ISBN:"+b.ISBN);
		
		int number = table.size();
		System.out.println("散列映射中有"+number+"个元素:");
		
		Collection<Book> collection = table.values();
		Iterator<Book> iter = collection.iterator();
		while(iter.hasNext()){
			Book te = iter.next();
			System.out.printf("书名:%s, ISBN: %s\n", te.name, te.ISBN);
		}
	}
}


 


程序运行结果如下

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>接口变量,那么接口就可以调用类实现的接口方法。

 

 

 

 

 

 

 

 

HashMap<K, V>泛型类