
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在什么情况下使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)