Java入门笔记之(第六章 collections之map)
Posted 晨沉宸辰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java入门笔记之(第六章 collections之map)相关的知识,希望对你有一定的参考价值。
一.基础
1.用途:用来映射键到值的对象
2. map存放键值对,不是一个集合
3. 通过key可以对象所需的value值,key可以获取value的值。
4. map的key值必须是唯一的,一个key对应一个value,但是不同key可以对应同一个value
5. 添加值的时候如果已经存在那么是需要后一个覆盖前一个
6. 通过key的hash值可以判断key值相同
二.操作
1.基本实现类
java.util.HashMap<K,V>;
java.util.TreeMap<K,V>;
2. 常用操作
- map没有基于index索引的操作
- 没有继承iterable接口,不支持foreach语句遍历,但是支持foreach方法
三.实例
第一步:建立User类
这个类组成:地名,序号,名字等,包括了常见的存取地方名字,序号等功能
package demo;
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;
}
}
第二步:创建基础list接口
package demo;
import java.util.*;
public class MapTest {
private static final List<User> USERS = create();
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();
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"));
}
第四步: 对map进行提取输出
private static void getMap() {
Map<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());
}
四.实例
package demo;
import java.util.*;
public class MapTest {
private static final List<User> USERS = create();
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();
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"));
/*2
956
1201*/
}
/**
* 以集合中user对象的ID为key,user对象本身为value
* size();get();
* 指定的key没有value?
*/
private static void getMap() {
Map<Integer, User> map = new HashMap<>();
for (User u : USERS) {
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());//出错
}
/**
* 以城市名称为key,以居民为value
* 每个城市住着多个人?
*/
private static void putListValue() {
List<User> hList = new ArrayList<>();
hList.add(USERS.get(0));
hList.add(USERS.get(3));
List<User> bList = new ArrayList<>();
bList.add(USERS.get(1));
bList.add(USERS.get(2));
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.BEIJING)) {
System.out.println(u.getName());
}//输出北京城市的值
/* 2
SUN
ZHANG
*/
}
/**
* 遍历User List集合,以城市名称为key,对应的居民集合为value自动分组。
* 即,遍历的同时基于不确定的城市名称,创建对应集合,再分组
*/
private static void putListValue2() {
}
/**
* 字符串key的特殊性
*/
private static void getMapStringKey() {
String n = new String("BO");
String n2 = new String("BO");
System.out.println(n.equals(n2));//比较值是不是相同的
System.out.println(n == n2);//比较是不是一个对象
Map<String, String> map = new HashMap<>();
map.put(n, "956");
map.put(n2, "925");
System.out.println(map.size());//会认为是一个对象
/*true
false
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();
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());
}
}
package demo;
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;
}
}
以上是关于Java入门笔记之(第六章 collections之map)的主要内容,如果未能解决你的问题,请参考以下文章