hash是无序的,不能排序,如果想要map能排序,就要使用TreeHash,它会根据键的字母顺序自动排序
HashMap就像一个数组,里面有16个位置可以存放数据,每个位置下面可以通过链表的方式存在各种数据
HashMap是键值对,通过键找到值,将键进行hashcode后,对hashcode后的值的进行%16,也就是0-15,然后找到键所在的数组位置,定位到键
如果在那个数组中后两个相同的键,前面的键会被后面的覆盖
1、写个User类,写个username和password变量,并对这两个变量进行getter、setter、toString、构造函数,不toString的话,用map调用时只能看见键的地址,无法看见内容
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
2、map类
import java.util.HashMap;
import java.util.Map;
public class MapTest {
@Test
public void Test1(){
Map<String,User> map = new HashMap<>();
map.put("班长",new User("小马",null));
map.put("学习委员",new User("小王",null));
map.put("体育委员",new User("小白",null));
map.put("卫生委员",new User("小男",null));
map.put("副班长",new User("小画",null));
// User中要toString,否则输入的是地址不是内容
// HashMap通过键找到值,是将键进行hashcode后,对hashcode后的值的进行%16,然后找到键所在的数组位置,定位到键
// 如果在那个数组中后两个相同的键,前面的键会被后面的覆盖
System.out.println(map.get("学习委员"));
// HashMap的遍历,死记硬背 hash不能排序,能根据Key排序的叫TreeMap,他会按字母顺序自动排序
for (Map.Entry entry : map.entrySet()){
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
}
}
上面的遍历是先出来键,然后出来值。我们对map的遍历还可以使用其他的方法,下面的方法可以直接遍历出map的值。set是hash的父类,所以可以用。
Set<String> keys = map.keySet();
for (String key : keys) {
System.out.println(map.get(key));
}