图一:
LinkedHashMap:使用链表维护添加进Map中的顺序。故遍历Map时,是按添加的顺序遍历的。
示例代码:
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
public class TestMap {
@Test
public void testLinkedHashMap() {
Map map = new LinkedHashMap();
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);//所以只会存一个
Set set = map.entrySet();
for(Object obj : set) {
Map.Entry ent = (Map.Entry) obj;
System.out.println(obj);
}
}
/*
* 结果:
* AA=142345
* MM=987
* 11=nlllljlgjal
* null=null
* TestMapObject [name=GG, age=90]=98
*/
}
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;
}
}