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对象,然后输出所有的值。
例:使用散列映射的常用方法,并遍历散列映射
- 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>泛型类
- HashMap<K, V>泛型类
- HashMap<K, V>泛型类
- HashMap<K, V>泛型类
- HashMap<K,V>详解
- java.util.HashMap<K,V>
- 【源码分析】HashMap的put(K k,V v)方法
- HashMap put(K key, V value)解析
- hashMap--put(k,v)源码分析
- Java集合之Hashtable<K,V>,TreeMap<K,V>,HashMap<K,V>自动排序
- java 遍历嵌套hashmap,即hashmap<k,v>中k类型为hashmap
- 降低对象的引用级别到软引用 class SoftValueMap<K, V> extends HashMap<K, V>
- Java集合Map<K,V>,HashMap<K,V>的使用,for循环正解
- 深入学习java集合:HashMap<K,V>实现
- 类 Hashtable<K,V>及与HashMap的区别
- hashMap等Map集合<K,V>为空情况
- HashMap.put(K key, V value)源码分析
- 关于类 HashMap<K,V> 遍历方式及HashMap<String,String>和HashMap<Person,Person>
- hadoop secondarynamenode的两种配置方式
- 自古婊子出行政,人尽可夫跑市场。歪瓜裂枣在财务,傻了吧唧做执行。
- MTK学习记录
- HDOJ - 1012 - u Calculate e(数学、水题)
- Linux下Fork与Exec使用
- HashMap<K, V>泛型类
- 循环赛赛程安排---递归思想
- 八数码 poj1077 Eight(A*、IDA*)
- Eclipse中,消除JavaScript报的警告
- share memory realm does not exist
- Hadoop迁移Namenode
- oracle中的trim函数
- ORA-01830、ORA-01849
- c++中的private/protect/public & virtual