黑马程序员技术交流社区
标题:
【技术问题】Map及HashMap的使用
[打印本页]
作者:
蓝墨清幽
时间:
2015-4-22 11:24
标题:
【技术问题】Map及HashMap的使用
package com.itheima;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class Test12 {
/**
*
題目:编写一个类,在main方法中定义一个Map对象(采用泛型),
加入若干个对象,然后遍历并打印出各元素的key和value。
分析:
1.创建Map对象
2.加入若干对象
3.遍历Map对象
4.打印元素key和value
*/
public static void main(String[] args) {
//创建Map对象
Map<Name,Integer> map = new HashMap<Name,Integer>();
/**给map添加键值对
* map的键(key)不予许重复
* HashMap允许一个null键和多个null值,不同步
* 如果HashMap的键是自定义的类对象,需要重写hashcode()和equals()
* 因为HashMap判断键是否相同的原则是,先判断两个对象的hashcode,在判断equals
* 含有hash的集合中,一般都要重新hashcode和equals
*/
map.put(new Name("Tom"), 32);
map.put( new Name("Maria"), 21);
map.put(new Name("Kite"), 10 );
//重写hashcode后不会添加
map.put(new Name("Tom"), 10);
/**
* 如果重写hashcode,map.size()是3否则是4;
* 如果不重写,也无法直接通过map.get(new Name("Tom")获取对象的值;
*/
System.out.println(map.size());
/**
* 通过获得键的Set集合,然后获得键的Set集合的迭代器,获得每个键(key)
* 通过键(key)获得值(value)
*/
Set<Name> set = map.keySet();
Iterator<Name> it = set.iterator();
while(it.hasNext()){
Name key = it.next();
Integer value = map.get(key);
System.out.println(key+"="+value);
}
/**
* 通过获得键值对的Set集合,然后获得键值对的Set集合的迭代器,获得每个键(key)
* 值(value)对entry;
* 通过entry的getKey()和getValue()方法,获得键(key)和值(value);
*/
Set<Entry<Name, Integer>> entrySet = map.entrySet();
Iterator<Entry<Name,Integer>> iterator = entrySet.iterator();
while(iterator.hasNext()){
Entry<Name,Integer> entry = iterator.next();
Name key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key+"="+value);
}
}
}
class Name{
private String name;
Name(){}
Name(String name){
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Name other = (Name) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return "Name [name=" + name + "]";
}
}
复制代码
作者:
突然世界晴
时间:
2015-4-22 11:54
程序媛?你好【请无视我
作者:
邓士林
时间:
2015-4-22 12:18
迄今为止,我真没怎么见过程序媛,基本都是女汉子
作者:
huanmenglt
时间:
2015-4-22 13:55
你想问什么,最起码写出来吧。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2