public static String getUrlWithQueryString(String url, Map params) { if (params == null) { return url; }
StringBuilder builder = new StringBuilder(url); if (url.contains("?")) { builder.append("&"); } else { builder.append("?"); } int i = 0; for (String key : params.keySet()) { String value = params.get(key); if (value == null) { // 过滤空的key continue; } if (i != 0) { builder.append('&'); }
获取Map集合中所有的key可以通过map集合的keySet()方法获取
例如:
Map map = new HashMap();
map.put("xx","xx"); //存放数据
//.... 省略
Set set = map.keySet();
//可以通过迭代器进行测试
Iterator iter = set.iterator();
while (iter.hasNext()) {
String key = (String) iter.next();
// printkey
}
java 获取map中所有的key和value值
java.util.Iterator 对 collection 进行迭代的迭代器。
java.util.Iterator it = map.entrySet().iterator(); while(it.hasNext()){ java.util.Map.Entry entry = (java.util.Map.Entry)it.next(); entry.getKey() //返回对应的键 entry.getValue() //返回对应的值 }
以前遍历Map key-value比较习惯的方式是先获取Map中的所有key值,
然后根据key,依次从Map中去数据,基本方式如下:
Mapstring,string
public static String getUrlWithQueryString(String url, Map params) { if (params == null) { return url;
}
StringBuilder builder = new StringBuilder(url); if (url.contains("?")) {
builder.append("&");
} else {
builder.append("?");
} int i = 0; for (String key : params.keySet()) {
String value = params.get(key); if (value == null) { // 过滤空的key
continue;
} if (i != 0) {
builder.append('&');
}
builder.append(key);
builder.append('=');
builder.append(encode(value));
i++;
} return builder.toString();
}
用 for (String key : params.keySet())读取map
KeySet():
将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key
keySet()
HashMap hashmp = ne HashMap();
hashmp.put("aa", "111");
Set set = hashmp.keySet();
Iterator iter = set.iterator();
while (iter.hasNext()) {
String key = (String) iter.next();
// printkey}
// traverse
for (String key : list.get(pos).keySet() ) {
myKey = key;}
可以进行迭代,去除所有的key
也可以用循环,从1到n 取出每一个key
java怎么得到map里面的所有key
Map接口提供keySet()方法,可以获取所有key到一个set集合,因为map中的key本身就是set集合,所以和set集合中的特性是一样的。
ava 获取map中所有的key和value值
java.util.Iterator 对 collection 进行迭代的迭代器。
java.util.Iterator it = map.entrySet().iterator(); while(it.hasNext()){ java.util.Map.Entry entry = (java.util.Map.Entry)it.next(); entry.getKey() //返回对应的键 entry.getValue() //返回对应的值 }
以前遍历Map key-value比较习惯的方式是先获取Map中的所有key值,
然后根据key,依次从Map中去数据,基本方式如下:
Mapstring,string
Map接口提供keySet()方法,可以获取所有key到一个set集合,因为map中的key本身就是set集合,所以和set集合中的特性是一样的。
Map四种遍历的代码示例
(1)数据准备
HashMap map = new HashMap();
map.put("1","DrDeng1");
map.put("2","DrDeng2");
map.put("3","DrDeng3");
遍历方式一:需要说明的是,该方法不是最优选择,一般不推荐使用
System.out.println("通过map.keyset进行遍历key和value");
for (String key:map.keySet()){
System.out.println("key= "+key+" and value= "+map.get(key));
}
遍历方式二:通过对map entrySet的遍历,也可以同时拿到key和value,一般情况下,性能上要优于keyset,这一种也是最常用的遍历方法,但Iterator也有其优势:在用foreach遍历map时,如果改变其大小,会报错,但如果只是删除元素,可以使用Iterator的remove方法删除元素
System.out.println("通过Map.entrySet;")
Set
for (Map.Entryentry:entries){
String value = entry.getValue();
String key = entry.getKey();
System.out.println("key="+key+"value="+value);
}
遍历方式三:对于上面的几种foreach都可以用Iterator代替,其实foreach在java5中才被支持,foreach的写法看起来更简洁
System.out.println("通过iterator遍历所有的value,但是不能遍历key");
Iterator
while (iterator.hasNext()){
Map.Entry next = iterator.next();
System.out.println("key="+next.getKey()+"value="+next.getValue());
}
遍历方式四:
System.out.println("通过map.values()遍历所有的key,但是不能遍历key");
for (String v:map.values()){
System.out.println("value="+v);
}
结论1:
一般来讲使用entrySet的方式进行遍历是效率最高的,因为hashMap内部的存储结构就是基于Entry的数组,在用这种方式进行遍历时,只需要遍历一次即可。而使用其他方式的时间复杂度可以会提高,例如:keySet方式,每次都需要通过key值去计算对应的hash,然后再通过hash获取对应的结果值,因此效率较低。
结论2:
如果只是获取key,或者value,推荐使用keySet或者values方式
如果同时需要key和value推荐使用entrySet
如果需要在遍历过程中删除元素推荐使用Iterator
如果需要在遍历过程中增加元素,可以新建一个临时map存放新增的元素,等遍历完毕,再把临时map放到原来的map中
相关问题推荐
100-199 用于指定客户端应相应的某些动作。 200-299 用于表示请求成功。 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 400-499 用于指出客户端的错误。 400 语义有误,当前请求无法被服务器理解。 401 当前请求需要用户验证...
1、相同点(1)都是表现层框架,都是基于MVC设计模型(2)底层都离不开 Servlet API(3)处理请求的机制都是一个核心控制器2、不同点(1)SpringMVC的入口是Servlet,而Struts2的入口是Filter(2)SpringMVC是基于方法设计的,而Struts2是基于类(3)SpringMV...
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结...
(1)idea启动时会有两个快捷方式,安装完后默认生成在桌面的是32位的idea的快捷方式,如果我们使用这个快捷方式运行大项目,一般都会很卡。解决方法是找到idea的安装目录,然后进入bin文件夹,找到名称为idea64的应用程序,右键他生成桌面快捷方式。以后每次...
Java中有八种数据类型,基础数据类型分别是:byte,short,int,long,float,double,char,boolean,引用数据类型分别是:数组,类和接口。方法传参的时候我们有两种,一种是形式参数(定义方法时写的参数),一种是实际参数(调用方法时给的具体值)。首先...
现在的架构很多,各种各样的,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等,还有和这些架构相关的管理型的技术方法,如 DevOps、应用监控、自动化运维、SOA 服务治理、去 IOE 等等,还有很多。分布式架构其实就是分布式系...
1、监控GC的状态使用各种JVM工具,查看当前日志,分析JVM参数的设置,分析堆内存快照和GC日志,根据实际的各区域的内存划分和GC的执行时间,判断是否需要进行优化2、分析结果、判断是否需要优化如果各项参数设置合理,系统没有超时的日志出现,GC频率也不高,...
从两个方面对ElasticSearch和Solr进行对比,从关系型数据库中的导入速度和模糊查询的速度。单机对比1. Solr 发布了4.0-alpha,试了一下,发现需要自己修改schema,好处是它自带一个data importer。在自己的计算机上测试了一下,导入的性能大概是:14分钟导入 ...
操作系统中有若干进程并发执行,它们不断申请、使用、释放系统资源,虽然系统的进 程协调、通信机构会对它们进行控制,但也可能出现若干进程都相互等待对方释放资源才能 继续运行,否则就阻塞的情况。此时,若不借助外界因素,谁也不能释放资源,谁也不能解 ...
MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。 如果想覆盖对象工厂的默认行为,则可以...
学vue应该要先学习javascript 的基础知识和用法。
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用...
是一个文件服务器,用来上传下载文件.它是一个分布式集群的.分2个角色调度和存储.上传时配置调度后上传.用的时候需要搭建.如果不会搭建想省事还可以选择阿里的oss .项目中应用还是比较多的因为一般项目都有文件上传和下载.选择目前就这2种方案.根据公司情况选...
使用场景:常规key-value缓存应用。常规计数: 微博数, 粉丝数。实现方式:String在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。...
一、装箱和拆箱原始类型转换为对象类型就是装箱,反之就是拆箱。原始类型byte,short,char,int,long,float,double,boolean对应的封装类为Byte,Shor,Character,Integer,Long,Float,Double,Boolean.二、源码解读自动装箱时编译器调用valueOf将原始类型值转换成对...