Map示例代码
User类:
package com.pzc.Map;
public class User {
public static final String HAERBIN = "哈尔滨";
public static final String BEIJING = "北京";
private int id;
private String name;
private String city;
public User(){};
public User (String name){
this.name = name;
}
public User(int id,String name,String city){
this.id = id;
this.name = name;
this.city = city;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
MapTest类:
package com.pzc.Map;
import java.nio.channels.AsynchronousChannel;
import java.util.*;
public class MapTest {
/**
* 创建有四个user对象的list集合 并赋值给list常量*/
private static final List<User> USERS = creat();
public static List<User> creat(){
User u1 = new User(1, "pzc", User.HAERBIN);
User u2 = new User(2, "wyn", User.HAERBIN);
User u3 = new User(3, "345", User.BEIJING);
User u4 = new User(4, "456", User.BEIJING);
List<User> users = new ArrayList<>();
users.add(u1);
users.add(u2);
users.add(u3);
users.add(u4);
return users;
}
public static void main(String[] args) {
//getMapStringKey();
//getKeySet();
}
/**
* 创建基本键值对;获取
*/
private static void putMapBase() {
HashMap<String,String> map = new HashMap<>();
map.put("pzc","wyn");
map.put("nlj","xkx");
System.out.println(map.size());//获取map长度
System.out.println(map.get("pzc"));//通过键获取值
map.put("pzc","wyn1");
System.out.println(map.get("pzc"));//发现值被覆盖
}
/**
* 用forEach以集合中user对象的ID为key,user对象本身为value
* size();get();
* 指定的key没有value?
*/
private static void getMap() {
HashMap<Integer, User> map = new HashMap<>();
for (User u : USERS) {
map.put(u.getId(),u);
}
System.out.println(map.size());
System.out.println(map.get(1).getCity());
System.out.println(map.get(100).getCity());//如果取值key超出范围,
// 编译没问题,运行会出错,因此一定要自己注意,可以用if判断
}
/**
* 以城市名称为key,以居民为value
* 每个城市住着多个人?
*/
private static void putListValue() {
List<User> hlist = new ArrayList<>();
hlist.add(USERS.get(0));
hlist.add(USERS.get(1));
List<User> blist = new ArrayList<>();
blist.add(USERS.get(2));
blist.add(USERS.get(3));
Map<String,List<User>> map = new HashMap<>();
map.put(User.HAERBIN,hlist);
map.put(User.BEIJING,blist);
System.out.println(map.size());
for (User u : map.get(User.HAERBIN)) {
System.out.println(u.getName());
}
}
/**
* 遍历User List集合,以城市名称为key,对应的居民集合为value自动分组。
* 即,遍历的同时基于不确定的城市名称,创建对应集合,再分组
*/
private static void putListValue2() {
Map<String,List<User>> map = USERS.stream() //基于流的操作
.collect(Collectors.groupingBy(User::getCity));
for (User h : map.get(User.HAERBIN)) {
System.out.println(h.getName());
}
System.out.println("==============");
for (User b : map.get(User.BEIJING)) {
System.out.println(b.getName());
}
}
/**
* 字符串key的特殊性
*/
private static void getMapStringKey() {
String n1 = new String("pzc");
String n2 = new String("pzc");
System.out.println(n1.equals(n2)); //ture
System.out.println(n1==n2); //false
Map<String,String> map = new HashMap<>();
map.put(n1,"123");
map.put(n2,"456");
System.out.println(map.size());// 结果为1
//String 重写了hashCode()/equals()方法,因此基于字符串,而不是hash值比较
}
private static void getKeySet() {
User user = new User(1, "BO", "哈尔滨");
User user2 = new User(2, "SUN", "北京");
User user3 = new User(3, "ZHANG", "上海");
Map<Integer, User> uMap = new HashMap<>();
uMap.put(user.getId(), user);
uMap.put(user2.getId(), user2);
uMap.put(user3.getId(), user3);
Set<Integer> nMapKeys = uMap.keySet();//将Map中所有的键存入到set集合中。
for (int i : nMapKeys) {
System.out.println(i);
}
}
}