前言
作为一个高频在实际工作中被使用的这么一个集合,以下就是我今天的小结
hashmap
一个map对象存放的都是键值对的数据
Map中是一个key有且只有一个value.
但是一个value可以对应多个key值.
说白了就是,key不能重复, 但是value可以重复。
使用key获取value
一般都是通过key,然后map.get(key)获得到value.
遍历map
使用For-Each迭代entries
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(Map.Entry<Integer, Integer> entry : map.entrySet()){
System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue())
}
mybatis获取数据之后封装成map需要注意什么
映射文件的resultType
选择hashmap
查询语句是一个坑,字段值将作为value, 而不是其他某个字段的key, 也就是说,sql语句的写法应该是
select 字段 as 设置key名,… from 表名
as前的这个将作为value
as后的这个将作为key, 可以是一切字符串。
说白了就是表的字段名或者字段的别名将是key, 而字段本身的值将是键值对的值。sql查询多少字段就有多少个键值对,表中有多少行就有多少个map对象。
还有一个坑就是方法的返回值应该是,List<HashMap<Object , Object>>
如果这样一来会导致业务代码多一层循环,可以放弃这种方式。还是直接接收list。
list怎么转换成map
例如:
List<UserEntity> list = UserMapper.getAllAsList();
if(list.isEmpty())
{
return;
}
Map<string,String> map = list.stream().collect(Collectors.toMap(UserEntity::getId, UserEntity::getName);
解决数据表中有字段重复,被作为key时报错
倘若此时的表的id并不满足做Key的要求, 有重复的id
那么就应该加上
(key1, key2) -> key1)
Map<string,String> map = list.stream().collect(Collectors.toMap(UserEntity::getId, UserEntity::getName,(key1, key2) -> key1));
为什么要搞hashmap
说到底是一个优化的问题, 当一个循环中每次都要去拿数据库的数据时,如果可以在循环外直接只拿一次, 性能就好得多。