图一:
示例代码:
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
public class TestMap {
/**
* HashMap:
* 1.key是用Set来存放的,不可重复。value是用Collection来存放的,可重复
* 一个key-value对,是一个Entry。所有的Entry是用Set存放的,也是不可重复的。
* 2.向HashMap中添加元素时,会调用key所在类的equals()方法,判断两个key是否相同。
* 若相同 则只能添加进后添加的那个元素。
*/
@Test
public void test() {
Map map = new HashMap();
map.put("AA", 142345);
map.put("MM", 987);
map.put(11, "nlllljlgjal");
map.put(null, null);
map.put(new TestMapObject("GG", 90), 98);//TestMapObject类已经重写了hashCode()方法
map.put(new TestMapObject("GG", 90), 98);//所以只会存一个
System.out.println(map.size());
System.out.println(map);
map.remove("AA");
System.out.println(map);
Object obj = map.get("MM");
System.out.println();
//1.遍历key集
System.out.println("1.遍历key集");
Set keys = map.keySet();
for (Object k : keys) {
System.out.println(k);
}
//2.遍历value集
System.out.println("2.遍历value集");
Collection col = map.values();
Iterator it = col.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
//3.遍历key-value对
//方法一:
System.out.println("3.遍历key-value对-方法一:");
Set kv = map.keySet();
for (Object o : kv) {
System.out.println(o + "->" + map.get(o));
}
//方法二:
System.out.println("3.遍历key-value对-方法二:");
Set kv2 = map.entrySet();
for (Object o : kv2) {
Map.Entry ent = (Map.Entry) o;
System.out.println(ent);
}
}
}
class TestMapObject {
private String name;
private int age;
public TestMapObject(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "TestMapObject [name=" + name + ", age=" + age + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
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;
TestMapObject other = (TestMapObject) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}