java Map

四、java数据类型之Map

  需要导入包:

import java.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<String, Object> ignoreCaseMap = new CaseInsensitiveMap(); 
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<String, String> map = new HashMap<String, String>();
// 方式二:初始化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()方法才是真正意义上的拷贝。

    原理:请参考http://www.dutycode.com/map_kaobei_shenkaobei_qiankaobei.html

    4.3.2 删

    方式一:使用remove方法

    语法:

      map.remove("key") 

    用途:移除map中指定的键值对

    说明:

      调用Map的remove(),如果该键存在,返回该key所映射的值;否则,返回null。

    举例:

Map<String, String> map = new HashMap<String, String>();
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<String, Object> mapData = new HashMap<String, Object>();
mapData.put("MSG1", "aa");
mapData.put("ERRORMSG1", "bb");
mapData.put("FILENAME1", "cc");
List<Map<String, Object>> jyxx = new ArrayList<Map<String, Object>>();
jyxx.add(mapData);
mapData = new HashMap<String, Object>();
//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<String,String>();,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 < docId.length) {
        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<String,Object> map = new HashMap<String,Object>();
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);
} 

2021年12月13日16:03:11

java8

map.forEach((k,v) -> System.out.println(k + "=" + v));

  (四)其他用法

    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转换成字符串
 * 格式:键+"|"+值+"$"
 * @param map
 * @return
 */
private String MapToString(Map map) {
    String str = "";
    Iterator iterator = map.entrySet().iterator();
    while (iterator.hasNext()) {
        Entry<String, Object> entry = (Entry<String, Object>) iterator.next();
        str += entry.getKey() + "|" + entry.getValue() + "$";
    }
    return str;
} 

    4.5.3 Map.toString()后字符串转换回Map(map形式字符串-->Map)

/**
 * Map.toString()后字符串转换回Map
 * @param str Map字符串
 * @return Map对象
 */
public static Map<String, String> mapStringToMap(String str) {
    str = str.substring(1, str.length() - 1);
    String[] strs = str.split(",");
    Map<String, String> map = new HashMap<>();
    for (String string : strs) {
        String key = string.split("=")[0].trim();
        String value = string.split("=")[1].trim();
        map.put(key, value);
    }
    return map;
}

  (六)进一步封装

  (七)功能实现 

    UpdateTime--2017年9月4日17:22:06

    4.7.1  Map中key的大小写转换

    实现:将Map中的key全部转换成小写

Map<String, Object> mapData = new HashMap<String, Object>();
mapData.put("MSG1", "aa");
mapData.put("ERRORMSG1", "bb");
mapData.put("FILENAME1", "cc");
List<Map<String, Object>> jyxx = new ArrayList<Map<String, Object>>();
jyxx.add(mapData);
System.out.println(jyxx.toString());// [{MSG1=aa, ERRORMSG1=bb, FILENAME1=cc}]
mapData = new HashMap<String, Object>();
// 使用foreach迭代List中的Map
for (Map<String, Object> map : jyxx) {
    // 使用Entry类Map中的每个键值对
    for (Entry<String, Object> entry : 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}]

2022年9月13日18:41:42

map取值

当从map中根据key取值,如果是一个不存在的key,根据key取到的值,再将其转换成String,得到的是什么?

Map<String, Object> map = new HashMap<>(1);
String value = map.get("key") + "";
System.out.println(value);

if ("null".equals(value)) {
    System.out.println("map当中不存在此key");
}

value = (String) map.get("key");
System.out.println(value);
    
if (null == value) {
    System.out.println("map当中不存在此key");
}

value = String.valueOf(map.get("key"));
System.out.println(value);

if ("null".equals(value)) {
    System.out.println("map当中不存在此key");
}

我们可以看到:

当我们使用""或者String.valueOf()将null转换成字符串时,得到的将是字符串:"null" ;

使用(String) 进行强制转换时,得到的是java关键词:null。

将null转化成"null"

正确方式:

String n = null + "";
System.out.println("null".equals(n));

错误方式:

String n = String.valueOf(null);
System.out.println("null".equals(n));

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2017-05-26 09:09  Marydon  阅读(1306)  评论(0编辑  收藏  举报