Java中怎么遍历map中value值

Java中怎么遍历map中value值,第1张

Java中遍历Map对象的4种方法:

1、通过MapentrySet遍历key和value,在for-each循环中使用entries来遍历推荐,尤其是容量大时。

2、通过MapkeySet遍历key,通过键找值value遍历(效率低),普遍使用,二次取值。

3、如果只需要map中的键或者值,你可以通过MapkeySet或Mapvalues来实现遍历,而不是用entrySet。在for-each循环中遍历keys或values。

4、通过MapentrySet使用iterator遍历key和value。

扩展资料:

关于JAVA的遍历知识补充:

1、list和set集合都实现了Iterable接口,所以他们的实现类可以使用迭代器遍历,map集合未实现该接口,若要使用迭代器循环遍历,需要借助set集合。

2、使用EntrySet 遍历,效率更高。

参考资料:

百度百科--Map(映射)

一、Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。Map接口定义了如下常用的方法:

1、void clear():删除Map中所以键值对。

2、boolean containsKey(Object key):查询Map中是否包含指定key,如果包含则返回true。

3、boolean containsValue(Object value):查询Map中是否包含指定value,如果包含则返回true。

4、Set entrySet():返回Map中所包含的键值对所组成的Set集合,每个集合元素都是MapEntry对象(Entry是Map的内部类)。

5、Object get(Object key):返回指定key所对应的value,如Map中不包含key则返回null。

6、boolean isEmpty():查询Map是否为空,如果空则返回true。

7、Set keySet():返回该Map中所有key所组成的set集合。

8、Object put(Object key,Object value):添加一个键值对,如果已有一个相同的key值则新的键值对覆盖旧的键值对。

9、void putAll(Map m):将指定Map中的键值对复制到Map中。

10、Object remove(Object key):删除指定key所对应的键值对,返回可以所关联的value,如果key不存在,返回null。

11、int size():返回该Map里的键值对的个数。

12、Collection values():返回该Map里所有value组成的Collection。

Map中包含一个内部类:Entry。该类封装了一个键值对,它包含了三个方法:

1、Object getKey():返回该Entry里包含的key值。

2、Object getValeu():返回该Entry里包含的value值。

3、Object setValue(V value):设置该Entry里包含的value值,并返回新设置的value值。

二、HashMap和Hashtable实现类:

1、HashMap与HashTable的区别:

1) 同步性:Hashtable是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的。而HashMap则是异步的,因此HashMap中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率。

2) 值:HashMap可以让你将空值作为一个表的条目的key或value,但是Hashtable是不能放入空值的。HashMap最多只有一个key值为null,但可以有无数多个value值为null。

2、性能:HashMap的性能最好,HashTable的性能是最差(因为它是同步的)

3、注意:

1)用作key的对象必须实现hashCode和equals方法。

2)不能保证其中的键值对的顺序

3)尽量不要使用可变对象作为它们的key值。

三、LinkedHashMap:

它的父类是HashMap,使用双向链表来维护键值对的次序,迭代顺序与键值对的插入顺序保持一致。LinkedHashMap需要维护元素的插入顺序,so性能略低于HashMap,但在迭代访问元素时有很好的性能,因为它是以链表来维护内部顺序。

四、TreeMap:

Map接口派生了一个SortMap子接口,SortMap的实现类为TreeMap。TreeMap也是基于红黑树对所有的key进行排序,有两种排序方式:自然排序和定制排序。Treemap的key以TreeSet的形式存储,对key的要求与TreeSet对元素的要求基本一致。

1、MapEntry firstEntry():返回最小key所对应的键值对,如Map为空,则返回null。

2、Object firstKey():返回最小key,如果为空,则返回null。

3、MapEntry lastEntry():返回最大key所对应的键值对,如Map为空,则返回null。

4、Object lastKey():返回最大key,如果为空,则返回null。

5、MapEntry higherEntry(Object key):返回位于key后一位的键值对,如果为空,则返回null。

6、MapEntry lowerEntry(Object key):返回位于key前一位的键值对,如果为空,则返回null。

7、Object lowerKey(Object key):返回位于key前一位key值,如果为空,则返回null。

8、NavigableMap subMap(Object fromKey,boolean fromlnclusive,Object toKey,boolean toInciusive):返回该Map的子Map,其key范围从fromKey到toKey。

9、SortMap subMap(Object fromKey,Object toKey );返回该Map的子Map,其key范围从fromkey(包括)到tokey(不包括)。

10、SortMap tailMap(Object fromkey ,boolean inclusive):返回该Map的子Map,其key范围大于fromkey(是否包括取决于第二个参数)的所有key。

11、 SortMap headMap(Object tokey ,boolean inclusive):返回该Map的子Map,其key范围小于tokey(是否包括取决于第二个参数)的所有key。

五、WeakHashMap:

WeakHashMap与HashMap的用法基本相同,区别在于:后者的key保留对象的强引用,即只要HashMap对象不被销毁,其对象所有key所引用的对象不会被垃圾回收,HashMap也不会自动删除这些key所对应的键值对对象。但WeakHashMap的key所引用的对象没有被其他强引用变量所引用,则这些key所引用的对象可能被回收。WeakHashMap中的每个key对象保存了实际对象的弱引用,当回收了该key所对应的实际对象后,WeakHashMap会自动删除该key所对应的键值对。

六、IdentityHashMap类:

IdentityHashMap与HashMap基本相似,只是当两个key严格相等时,即key1==key2时,它才认为两个key是相等的 。IdentityHashMap也允许使用null,但不保证键值对之间的顺序。

七、EnumMap类:

1、EnumMap中所有key都必须是单个枚举类的枚举值,创建EnumMap时必须显示或隐式指定它对应的枚举类。

2、EnumMap根据key的自然顺序,即枚举值在枚举类中定义的顺序,来维护键值对的次序。

3、EnumMap不允许使用null作为key值,但value可以。

HashMap 散列表 插入和查询的开销是固定的; 可以通过构造方法设置容量和负载因子,调整性能默认选择

LinkedHashMap 链表

取得元素的顺序是其插入次序,或者最近最少使用次序;插入时比HashMap略慢,但迭代时更快

TreeMap 红黑树 总是保证有序; 可以通过subMap()方法返回一个子树

WeakHashMap 弱键映射,允许释放映射所指向的对象

ConcurrentHashMap 线程安全,不涉及同步加锁

IdentityHashMap 用 == 代替 equals() 进行比较; 插入 *** 作不会随着Map尺寸变大而明显变慢

要实现你的要求,需要把输入的数据按行存入数组,然后把句子按空格切分成单词,把单词中的数字用正则表达式匹配出来与最大值比较,最后输出最大值所在行

用sort函数,因为有数字又有字符,所以比较不方便,不如自定义比较

完整的Perl程序如下(每行都加了注释)

@arr=();#定义一个空数组

while(defined($line = <STDIN>)){#从标准输入设备读取一行赋给$line,直到最后一行

push(@arr,$line);#把读取的一行压入数组

}

$max=0;#定义最大值变量,并赋初值0

$maxi=0;#定义最大值所在行变量,并赋初值0

for($i=0;$i<@arr;$i=$i+1){ #for_i循环遍历每行数据

@num=split(/ +/,$arr[$i]);#把每行数据按空格切分成单词

for($j=0;$j<@num;$j=$j+1){#for_j循环遍历每行数据的每个单词

$s=$num[$j];#把切分出来的单词赋给临时变量$s

if($s=~ m/[0-9]+/){ #用正则表达式匹配数字,如果有赋给$s

if($max<$s){ #如果数字大于最大值

$max=$s; #把最大值赋给$max

$maxi=$i;#把最大值所在行号赋给$maxi

}

}

}

}

print @arr[$maxi];#打印最大值所在行的数据

源代码

1、在对应的JavaScript文件中,定义一个Map数据结构变量m,并分别打印值和类型,如下图所示。

2、保存代码并运行,结果发现Map {}以及对象类型(Map是一种对象),如下图所示。

3、接着调用Map数据结构中的set方法,添加5个元素,其中有一个的key值重复了,如下图所示。

4、保存代码并运行,查看控制台打印结果,发现key-value值,如下图所示。

5、使用get()方法获取单个元素,传入的参数是key值。

6、最后保存代码并运行,可以查看到Map数据结构中的value值。

public static void main(String[] args) {

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

mapput("key1", "value1");

mapput("key2", "value2");

mapput("key3", "value3");

Set<String> keySet = mapkeySet();

int i = mapsize()-1;

Map<Integer, String> mapKey = new HashMap<Integer, String>();

Map<Integer, String> mapValue = new HashMap<Integer, String>();

for(javautilMapEntry<String, String> entry : mapentrySet()) {

//将原来MAP的VALUE放入新的MAP的VALUE里面

mapKeyput(i, entrygetValue());

//将原来MAP的KEY放入新的MAP的VALUE 里面

mapValueput(i, entrygetKey());

i--;

}

//打印KEY值

Systemoutprintln(mapKeyget(2));

//打印VALUE值

Systemoutprintln(mapValueget(0));

}

扩展资料:

java键值对的使用

Map集合没有继承Collection接口,但是其提供了key到value的映射。每一个key不能有相同,每个key只能映射一个value值。

下面通过一个程序来说明键值对的使用,下面是一个基本的键值对应用程序:

package Test;

import javautilCollection;

import javautilHashMap;

import javautilIterator;

import javautilMap;

import javautilSet;

public class KeyValue {

public static void main(String[] args) {

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

mapput("01", "张三");

mapput("02", "王五");

Set<String> set=mapkeySet();

Iterator <String> it=setiterator();

Systemoutprintln("key中集合元素:");

while(ithasNext()){

Systemoutprintln(itnext());

}

Collection <String> coll=mapvalues();

it=colliterator();

Systemoutprintln("value中集合元素:");

while(ithasNext()){

Systemoutprintln(itnext());

}

}

}

输出结果如图所示:

首先,一个job具体启动多少个map,是由你配置的inputformat来决定的。inputformat在分配任务之前会对输入进行切片。最终启动的map数目,就是切片的结果数目。具体来看 一、如果使用是自定义的inputformat,那么启动多少个map

需要获取mapreduce的运行信息,比如运行状态,map,reduce的执行进度 hadoop 50030端口提供web ui服务,没找到提供json或者xml的服务方式 于是,查找hadoop 50030的加载

以上就是关于Java中怎么遍历map中value值全部的内容,包括:Java中怎么遍历map中value值、java中几种Map在什么情况下使用,并简单介绍原因及原理、java中几种Map在什么情况下使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9529084.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存