导航:首页 > 方法技巧 > 遍历集合的三种方法如何遍布map

遍历集合的三种方法如何遍布map

发布时间:2022-07-31 10:54:57

❶ java Map 怎么遍历

java Map 遍历一般有四种方式

方式一: 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。

作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。

因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。

总结:

如果仅需要键(keys)或值(values)使用方法二。

如果所使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。

否则使用方法一(键值都要)。

(1)遍历集合的三种方法如何遍布map扩展阅读:

类似的遍历算法:

二叉树的遍历算法

1、先(根)序遍历的递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴ 访问根结点;

⑵ 遍历左子树;

⑶ 遍历右子树。

2、中(根)序遍历的递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴遍历左子树;

⑵访问根结点;

⑶遍历右子树。

3、后(根)序遍历得递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴遍历左子树;

⑵遍历右子树;

⑶访问根结点。

❷ java遍历Map的几种方法分析

1.先初始化一个map
public class TestMap {
public static Map<Integer, Integer> map = new HashMap<Integer, Integer>();
}
2.keySet values
如果只需要map的key或者value,用map的keySet或values方法无疑是最方便的
// KeySet 获取key
public void testKeySet() {
for (Integer key : map.keySet()) {
System.out.println(key);
}
}
// values 获取value
public void testValues() {
for (Integer value : map.values()) {
System.out.println(value);
}
}
3.keySet get(key)
如果需要同时获取key和value,可以先获取key,然后再通过map的get(key)获取value

需要说明的是,该方法不是最优选择,一般不推荐使用

// keySet get(key) 获取key and value
public void testKeySetAndGetKey() {
for (Integer key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}
}
4.entrySet
通过对map entrySet的遍历,也可以同时拿到key和value,一般情况下,性能上要优于上一种,这一种也是最常用的遍历方法

// entrySet 获取key and value
public void testEntry() {
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
5.Iterator
对于上面的几种foreach都可以用Iterator代替,其实foreach在java5中才被支持,foreach的写法看起来更简洁

但Iterator也有其优势:在用foreach遍历map时,如果改变其大小,会报错,但如果只是删除元素,可以使用Iterator的remove方法删除元素

// Iterator entrySet 获取key and value
public void testIterator() {
Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, Integer> entry = it.next();
System.out.println(entry.getKey() + ":" + entry.getValue());
// it.remove(); 删除元素
}
}

❸ java中,怎么在jsp页面遍历map集合

java中在jsp上遍历map的方法是利用jstl标签。
利用el表达式 + jstl标签:
1> 引入jstl核心标签库:
<%@ taglib prefix="c" uri="<a href="http://java.sun.com/jsp/jstl/core" %>" target="_blank">http://java.sun.com/jsp/jstl/core" %></a>

2> 利用foreach遍历map:
<c:forEach items="${map}" var="m">

${m.key} --> ${m.value}

</c:forEach>

❹ 哪种Map遍历方法更优

我们都知道遍历Map一般有3种方法,values(),keySet()和entrySet(),

常见的是keySet用的多,简单容易理解,entrySet()是返回Map中的静态内部类Entry类类型的Set实例,当然了你别说forEach,forEach只是一种代替for(inti=0;;)和while()遍历的一种方式,底层也是用迭代器实现的,只不过把部分东西隐藏了,建议大家平常开发中能用forEach遍历,尽可能的用这个,《Effectivejava》中也明确表示了,简单而不容易出错。


如果Map中有大量的元素,而且并发量又很高,这就涉及到采用哪种遍历方法的问题,下面就来测试一下:

Map<String,String>mapTest=newHashMap<String,String>();
for(inti=0;i<10000;i++){
mapTest.put(String.valueOf(i),String.valueOf(i));
}


//一种遍历,keySet()方法

longstart=System.nanoTime();
Set<String>setEach=mapTest.keySet();
for(Stringkey:setEach){
Stringvalue=mapTest.get(key);
}
longend=System.nanoTime();
System.out.println("keySet遍历map耗时"+(end-start)/1000+"微秒");



//二种遍历,可用values()返回Collection<T>,不容易得到对应的key

start=System.nanoTime();
Collection<String>co=mapTest.values();
for(Stringvalue:co){
//遍历中也在创建value
}
end=System.nanoTime();
System.out.println("values遍历map(只得到值)耗时"+(end-start)/1000+"微秒");


//三种遍历,用entrySet()方法返回Set<Map.Entry<T,T>>类型,再获取里边的Map.Entry


start=System.nanoTime();
Set<Map.Entry<String,String>>entrySet=mapTest.entrySet();
for(Map.Entry<String,String>entry:entrySet){
Stringkey=entry.getKey();
Stringvalue=entry.getValue();
}
end=System.nanoTime();
System.out.println("entrySet遍历map耗时"+(end-start)/1000+"微秒");


经过多次运行,结果大概都是这样的:

values()是返回Map的所有value的集合collection,只能遍历到值,很难遍历到key所以一般不用,除非在某种特殊场合,所以一般采用的第一种和第三种方式。而测试表明entrySet()方式遍历效率更高。


entrySet()方式遍历之所以快于keySet(),一个原因是keySet相当与遍历了2次,

一次是对key的Set集合的遍历,二次是每次遍历过程都要通过key和map.get(key)来获取value值。

第二个原因是map.get(key)获取的时候,底层其实根据key的hashcode值经过哈希算法得到一个hash值然后作为索引映射到对应table数组的索引位置,这是一次密集型计算,很耗费CPU,如果有大量的元素,则会使CPU使用率飙升,影响响应速度,而entrySet()返回的set里边元素都是Map.Entry类型,key和value就是这个类的一个属性,entry.getKey()和entry.getValue()效率肯定很高。


所以平常开发过程中,如果对Map讲究效率的遍历的话,还是采用entrySet()方法。

❺ java实现遍历哈希映射表map的方法汇总

方法/步骤
1、JDK,开发必须的环境
2、IDE,还是推荐Eclipse,如果你的电脑够快,可以安装Idea,用过一次,太吃内存,就被抛弃了,但是很多同行都在推荐,听说很好。
现在开始进入今天的正题,使用Java代码遍历Map集合的方法汇总。
1、创建一个Java类,命名为MapTest
2、创建一个Map集合,并定义类型和put值:

3、循环遍历Map集合的第一种方法,代码如下:
/**
* 第一种
* foreach循环进行遍历
* 遍历的是key值,然后通过get(key)或者值
* key和keyset
*/
private static void firstMethod(HashMap<Integer, String> map){
System.out.println("foreach循环进行遍历");
for (Integer key : map.keySet()) {
System.out.println("key:"+key+"对应的值为:"+map.get(key));
}
}

4、通过Iterator遍历Map集合的第二种方法获取,代码如下:
/**
* 第二种
* 通过Iterator遍历获取
* 和List的遍历原理相同
*/
public static void secondMethod(HashMap<Integer, String> map){
System.out.println("通过Iterator遍历获取");
Iterator<Entry<Integer, String>> inte = map.entrySet().iterator();
while(inte.hasNext()){
Map.Entry<Integer, String> m = inte.next();
System.out.println("key:"+m.getKey()+"对应的值为:"+m.getValue());
}
}

5、通过map方法map.entrySet()遍历获取值的第三种方法,代码如下:
/**
* 第三种,通过map方法map.entrySet()遍历获取值
*/
public static void thirdMethod(HashMap<Integer, String> map){
System.out.println("第三种方式:entry");
for (Entry<Integer, String> str : map.entrySet()) {
System.out.println("key:"+str.getKey()+"对应的值为:"+str.getValue());
}
}

6、通过for循环,map.values()循环遍历获取值的第四种方法,代码如下:
这种方法是直接获取值,不获取key值:
/**
* 第四种,通过for循环,map.values()循环遍历获取值 直接获取值
*/
public static void fourthMethod(HashMap<Integer, String> map) {
System.out.println("通过map.values()循环遍历直接获取值");
for (String string : map.values()) {
System.out.println("map的值为:" + string);
}
}

7
7、不管是遍历Map还是List的,其本质都是获取对应的值,程序员在开发中可以根据开发场景适当的选择各种方法,但是理解其本质才是最主要的。

❻ map集合可以通过哪些方式进行遍历

❼ java中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());

}

注意:for-each循环在java 5中被引入所以该方法只能应用于java 5或更高的版本中。如果你遍历的是一个空的map对象,for-each循环将抛出NullPointerException,因此在遍历前你总是应该检查空引用。

方法二 在for-each循环中遍历keys或values。

如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

//遍历map中的键

for (Integer key : map.keySet()) {

System.out.println("Key = " + key);

}

//遍历map中的值

for (Integer value : map.values()) {

System.out.println("Value = " + value);

}

该方法比entrySet遍历在性能上稍好

方法三使用Iterator遍历

使用泛型:

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();

while (entries.hasNext()) {

Map.Entry<Integer, Integer> entry = entries.next();

System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

}

不使用泛型:

Map map = new HashMap();

Iterator entries = map.entrySet().iterator();

while (entries.hasNext()) {

Map.Entry entry = (Map.Entry) entries.next();

Integer key = (Integer)entry.getKey();

Integer value = (Integer)entry.getValue();

System.out.println("Key = " + key + ", Value = " + value);

}

方法四、通过键找值遍历(效率低)

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

for (Integer key : map.keySet()) {

Integer value = map.get(key);

System.out.println("Key = " + key + ", Value = " + value);

}

总结

如果仅需要键(keys)或值(values)使用方法二。

如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。

否则使用方法一(键值都要)。

阅读全文

与遍历集合的三种方法如何遍布map相关的资料

热点内容
专家教你两种去斑方法如何去祛斑 浏览:672
如新spa机使用方法5档 浏览:686
清洗衣服上的油污方法如何 浏览:309
女孩斜疝治疗方法 浏览:381
早醒型失眠治疗方法手术价格 浏览:674
魅蓝3手机设置呼叫转移在哪里设置方法 浏览:806
苹果xe卡顿掉帧解决方法 浏览:746
快速清除很多微信联系人的方法 浏览:89
如何引出论点的方法 浏览:638
常用手术器材辨认及使用方法 浏览:959
青毛豆怎么腌制方法 浏览:812
w7开机运行设置在哪里设置方法 浏览:361
新买的平板电脑正确的充电方法 浏览:88
电缆桥架快速连接方法 浏览:781
农村扎发简单方法 浏览:514
彩钢大棚安装方法 浏览:40
简述婴儿心理研究的主要方法 浏览:39
测定亚硫酸盐的常用方法 浏览:494
缩阴哑铃怎样使用方法 浏览:971
快速练好萨克斯的方法 浏览:995