Map接口实例
1,User类
package com.example20.collection;
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 String getCity() {
return city;
}
public void setId(int id) {
this.id = id;
}
public void setCity(String city) {
this.city = city;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2,MapTest类
package com.example20.collection;
import java.util.*;
public class MapTest {
private static final List<User> USERS = create();
private static User[] users;
private static List<User> create() {
//创建了四个人,分别由身份信息,名字,城市名称
User u = new User(1, "BO", User.HAERBIN);
User u1 = new User(2, "SUN", User.BEIJING);
User u2 = new User(3, "ZHANG", User.BEIJING);
User u3 = new User(4, "LIU", User.HAERBIN);
List<User> users = new ArrayList<>();
users.add(u);
users.add(u1);
users.add(u2);
users.add(u3);
return users;
}
public static void main(String[] args) {
//putMapBase();
//getMap();
//putListValue();
putListValue2();
//getMapStringKey();
}
/**
* 创建基本键值对;获取
*/
private static void putMapBase() {
//前面申请泛型类型了,所以后米的尖括号内就不用写泛型的类型了
Map<String, String> map = new HashMap<>();
map.put("BO", "956"); //添加键值对,键和值都应该是字符串
map.put("SUN", "925");
System.out.println(map.size());
System.out.println(map.get("BO"));
map.put("BO", "1201");
System.out.println(map.get("BO"));
}
/**
* 以集合中user对象的ID为key,user对象本身为value
* size();get();
* 指定的key没有value?
*/
private static void getMap() {
//int的引用类型就是Integer
Map<Integer, User> map = new HashMap<>();
for (User u : USERS) {
//put的是以id作为键,以User对象作为值
map.put(u.getId(), u);
}
System.out.println(map.size()); //输出:4
System.out.println(map.get(1).getCity()); //输出:哈尔滨
System.out.println(map.get(100).getCity()); //因为没有100,所以会返回一个空,导致一个空指针的产生
}
/**
* 以城市名称为key,以居民为value
* 每个城市住着多个人?
*/
private static void putListValue() {
List<User> hList = new ArrayList<>();
//集合hList是将家在哈尔滨的放入一个集合
hList.add(USERS.get(0));
hList.add(USERS.get(3));
//集合hList是将家在北京的放入一个集合
List<User> bList = new ArrayList<>();
bList.add(USERS.get(1));
bList.add(USERS.get(2));
Map<String, List<User>> map = new HashMap<>();
//因为我们向map里面装入的是集合,所以一共我们就放入了两个集合一个集合是哈尔滨一个是北京
//以城市名称为键,将城市所对应的集合作为值
map.put(User.HAERBIN, hList);
map.put(User.BEIJING, bList);
System.out.println(map.size()); //输出:2
//因为我们集合内装的是两个城市的集合所以最后的结果是2
for (User u : map.get(User.BEIJING)) {
System.out.println(u.getName()); // 输出:SUN ZHANG
//打印集合内的人的姓名
}
}
/**
* 遍历User List集合,以城市名称为key,对应的居民集合为value自动分组。
* 即,遍历的同时基于不确定的城市名称,创建对应集合,再分组
*/
private static void putListValue2() {
//创建键值为字符串,值为字符串的列表的map
Map<String, List<String>> map = new HashMap<>();
//循环遍历用户列表
for (User u : USERS) {
//判断当前键值是否存在当前键值
if(map.get(u.getCity()) == null) {
//不包含则创建一个列表,用来存储住在某地的人们
List<String> TList = new ArrayList<>();
TList.add(u.getName());
map.put(u.getCity(),TList);
}
else{
//如果已经包含了,那么就只需要对后面对应的值进行修改就行了
map.get(u.getCity()).add(u.getName());
}
}
//最后遍历输出
for (String key:map.keySet()){
System.out.println(key + " " + map.get(key));
}
}
/**
* 字符串key的特殊性
*/
private static void getMapStringKey() {
//声明两个字符串变量
String n = new String("BO");
String n2 = new String("BO");
//比较n和n2的值相不相等
System.out.println(n.equals(n2)); //输出:true
//比较n和n2是不是相同的对象
System.out.println(n == n2); //输出:false
Map<String, String> map = new HashMap<>();
map.put(n, "956");
System.out.println(map.get("BO")); //输出956
map.put(n2, "925");
System.out.println(map.size()); //输出:1
//因为相同的键(判断键的时候是直接基于字符串值,而非对象的hash值),所以第一个被覆盖掉了。
System.out.println(map.get("BO")); //输出:925
}
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();
for (int i : nMapKeys) {
System.out.println(i);
}
}
/**
* Map不支持foreach语句
*/
private static void remove() {
Map<Integer, User> uMap = new HashMap<>();
for (User u : USERS) {
uMap.put(u.getId(), u);
}
uMap.remove(1);
System.out.println(uMap.size());
}
}