java Map
CreateTime--2017年5月26日08:44:16
Author:Marydon
四、java数据类型之Map
需要导入包:
importjava.util.Map;import java.util.HashMap;
(一)数据格式
1.1 Map与HashMap
{FHIGHPRICE_VILLLEVE=0, FSTATUS=1, FPROVLEVELLIMIT=1, FBEGINDATE=, FENDDATE=, FCLASSNAME=药品类, FITEMSIZE=, FHIGHPRICE_TOWNLEVEL=0, FCATALOGTYPE=, FVILLLEVELLIMIT=1, FID=400119, FCLIINHOSLIMIT=3, FHIGHPRICE_CITYLEVEL=0, FREMARK=, methodName=updateTDICTCHARGEITEM, FFORMS=, FITEMTYPE=0, FCLASSCODE=01, FGENERALCODE=, FRCODE=410000, FMEDICARE=2, FZJM=DSTN(YNS), FITEMCODE=W9999990019003y, FHIGHPRICE_COUNLEVEL=0, FDRUGTYPE=1, FITEMNAME=达沙替尼(依尼舒)(20mg×7粒), FTOWNLEVELLIMIT=1, FHIGHPRICE_PROVLEVEL=0, FCOUNLEVELLIMIT=1, FCOMPUTERATIO=1.0, FFEECODE=0101, FUNIT=, FORGLIMIT=0}
1.2 CaseInsensitiveMap
所需jar包:commons-collections-3.2.1.jar
需要导入
import org.apache.commons.collections.map.CaseInsensitiveMap;
特征:Map中的键key不区分大小写
举例:
Map ignoreCaseMap = newCaseInsensitiveMap();
ignoreCaseMap.put("aaa", "ok");
System.out.println(ignoreCaseMap.get("aaa"));//ok
System.out.println(ignoreCaseMap.get("aAa"));//ok
System.out.println(ignoreCaseMap.get("AAa"));//ok
System.out.println(ignoreCaseMap.get("AAA"));//ok
(二)初始化
//方式一:初始化map
Map map = new HashMap();//方式二:初始化map并指定map容量大小
HashMap map2 = new HashMap(1);
说明:
初始化的时候既可以指定Map初始容量大小也可以不指定,主要涉及的是内存的优化,以后需要再说;// TODO
初始化的时候既可以对泛型进行控制也可以不做泛型控制,建议添加泛型控制;
实例化的时候既可以向上类型转换也可以不做转换,看需求;
当现有容量无法承载时,容量会自动扩增,具体扩增多少,有待研究。// TODO
论证容量自动扩增:
map2.put("key1", 1);
map2.put("key2", 2);
System.out.println(map2.toString());//{key2=2, key1=1}
(三)常用操作
4.3.1 增
方式一:使用put方法
语法:
map.put("key", value)
用途:往map中添加一个键值对key=value
方式二:使用putAll方法
语法:
map.putAll(map2)
用途:将Map对象A中所有的键值对复制到另一个Map对象B中
注意:
使用Map调用putAll()方法,并不是真正意义上的拷贝,Map对象B只是对Map对象A进行了引用,当Map对象A中的内容发生变化时,Map对象B也会发生变化;
使用HashMap调用putAll()方法才是真正意义上的拷贝。
4.3.2 删
方式一:使用remove方法
语法:
map.remove("key")
用途:移除map中指定的键值对
说明:
调用Map的remove(),如果该键存在,返回该key所映射的值;否则,返回null。
举例:
Map map = new HashMap();
map.put("test", "测试remove()的返回值");//移除存在的键
String removeMsg = map.remove("test");
System.out.println(removeMsg);//测试remove()的返回值
System.out.println("移除掉键key之后的Map内容为:" + map.toString());//{}//移除并不存在的键
removeMsg = map.remove("test1");
System.out.println(removeMsg);//null
方式二:使用clear方法
语法:
map.clear()
用途:清除map对象中所有的键值对
map.clear()方法使用条件:
这种情况不能使用
Map mapData = new HashMap();
mapData.put("MSG1", "aa");
mapData.put("ERRORMSG1", "bb");
mapData.put("FILENAME1", "cc");
List> jyxx = new ArrayList>();
jyxx.add(mapData);
mapData= new HashMap();//mapData.clear();不能使用clear()方法
mapData.put("MSG2", "aa");
mapData.put("ERRORMSG2", "bb");
mapData.put("FILENAME2", "cc");
jyxx.add(mapData);
System.out.println(jyxx.toString());
使用mapData = new HashMap();,list存储数据为:[{MSG1=aa, ERRORMSG1=bb, FILENAME1=cc}, {MSG2=aa, ERRORMSG2=bb, FILENAME2=cc}];
使用mapData.clear();,list存储数据为:[{MSG2=aa, ERRORMSG2=bb, FILENAME2=cc}, {MSG2=aa, ERRORMSG2=bb, FILENAME2=cc}]
这种情况可以使用
for (int j = 0; j < deptId.length; j++) {//清空Map
deptDocMap.clear();//会诊申请ID
deptDocMap.put("CONSULT_APPLY_ID", CONSULT_APPLY_ID);//医生信息肯定<=科室信息
if (j
deptDocMap.put("CONSULT_DOCTOR_ID", docId[j]);
deptDocMap.put("CONSULT_DOCTOR", docName[j]);
deptDocMap.put("DOCTOR_PHONE", docPhone[j]);
}
deptDocMap.put("CONSULT_DEPENT_ID", deptId[j]);
deptDocMap.put("CONSULT_DEPENT", deptName[j]);this.daoCONSULT_DEPENT_DOCTOR_INFO.insertOUTPATIENT_CONSULT_DD_INFO(deptDocMap);
}
说明:不再引用时可以清空
4.3.3 改
语法:
map.put("已存在的key",改变后的值)
用途:根据存在的key修改对应的value
4.3.4 取值
语法:
map.get("key")
用途:根据key获取对应的value
说明:map对象中如果存在该key则返回其所对应的值;否则,返回null。
举例论证:
String COURSE_NAME = (String)paramsMap.get("COURSE_NAME");//病程名称存在
if (null != COURSE_NAME && !"".equals(COURSE_NAME)) {
}
4.3.5 迭代Map
Map map = new HashMap();
map.put("语文", 1);
map.put("数学", 2);
map.put("英语", 3);
map.put("历史", 4);
map.put("政治", 5);
map.put("生物", 6);
map.put("生物", 7);
map.put("化学", 8);
4.3.5.1 迭代Map
UpdateTime--2017年6月9日10:00:05
4.3.5.2 只迭代键
//只遍历键
for(String key:map.keySet()) {
System.out.println(key);
}
4.3.5.3 只迭代值
//只遍历值
for(Object val:map.values()) {
System.out.println(val);
}
(四)其他用法
UpdateTime--2017年12月5日16:47:10
4.4.1 isEmpty()
用途:用于判断Map对象是否为空,返回true/false
举例:
//判断Map对象是否为空,返回true/false
transfromMap.isEmpty();
4.4.2 判断map中是否包含指定的key
方式一:map.containKey("key") ,返回true/false;
方法二:map.get("key") ,若存在返回对应的值,不存在返回null;
(五)格式转换
4.5.1 Map集合转换成json
4.5.2 将Map转换成字符串(Map-->String)
4.5.2.1 不含特殊转换格式
/*** 将Map转换成字符串*/
//方法一
String mapStr =String.valueOf(map);//方法二
String mapStr = map.toString();
4.5.2.2 指定字符串转换格式
/*** 将Map转换成字符串
* 格式:键+"|"+值+"$"
*@parammap
*@return
*/
privateString MapToString(Map map) {
String str= "";
Iterator iterator=map.entrySet().iterator();while(iterator.hasNext()) {
Entry entry = (Entry) iterator.next();
str+= entry.getKey() + "|" + entry.getValue() + "$";
}returnstr;
}
4.5.3 Map.toString()后字符串转换回Map(map形式字符串-->Map)
/*** Map.toString()后字符串转换回Map
*@paramstr Map字符串
*@returnMap对象*/
public static MapmapStringToMap(String str) {
str= str.substring(1, str.length() - 1);
String[] strs= str.split(",");
Map map = new HashMap<>();for(String string : strs) {
String key= string.split("=")[0].trim();
String value= string.split("=")[1].trim();
map.put(key, value);
}returnmap;
}
(六)进一步封装
(七)功能实现
UpdateTime--2017年9月4日17:22:06
4.7.1 Map中key的大小写转换
实现:将Map中的key全部转换成小写
Map mapData = new HashMap();
mapData.put("MSG1", "aa");
mapData.put("ERRORMSG1", "bb");
mapData.put("FILENAME1", "cc");
List> jyxx = new ArrayList>();
jyxx.add(mapData);
System.out.println(jyxx.toString());//[{MSG1=aa, ERRORMSG1=bb, FILENAME1=cc}]
mapData = new HashMap();//使用foreach迭代List中的Map
for (Mapmap : jyxx) {//使用Entry类Map中的每个键值对
for (Entryentry : map.entrySet()) {//将key转换成小写的Map存入到实例化后的mapData中
mapData.put(entry.getKey().toLowerCase(), entry.getValue());
}
}//将转换后的Map添加到List中的第一个位置
jyxx.add(0, mapData);
System.out.println(jyxx.toString());//[{filename1=cc, errormsg1=bb, msg1=aa}, {MSG1=aa, ERRORMSG1=bb, FILENAME1=cc}]