HashMap学习

来源:互联网 发布:京东商城和淘宝销售额 编辑:程序博客网 时间:2024/06/08 01:11

首先,Map和Set一样是无序的,Map中存储的是键值对,键(Key)是不能有重复的,而且一个键只能对应一个值(Value)。但是,一个值可以对应多个键。正是因为如此:

对于Map的KeySet()方法返回类型是Set,而Values()的返回类型是Collection。

HashMap是接口Map的一个实现类。

我们看一个例子:输入多个字符串,这些字符串可以有重复的,统计每个字符串出现的次数,并输入。使用HashMap实现。

package com.sailang.hashmap;import java.util.HashMap;import java.util.Iterator;import java.util.Set;public class MapTest{public static void main(String[] args){//定义一个HashMapHashMap map = new HashMap();//传入几个字符串,字符串中有重复的,统计每个字符串重复的次数,并打印for(int i = 0; i < args.length; i++){//判断字符串是否已经存在于HashMap中,如果不存在,直接放入。如果存在,将Value值加1再放入。再次放入的时候,会将以前的覆盖掉。if(map.get(args[i]) == null){map.put(args[i], new Integer(1));}else{Integer in = (Integer)map.get(args[i]);in = new Integer(in.intValue() + 1);//替换掉以前,相同键值的项map.put(args[i], in);}}//打印输出//获得HashMap的Key集合(Set)Set set = map.keySet();//使用迭代器,遍历Key集合,进而遍历所有的Value。for(Iterator it = set.iterator(); it.hasNext();){String key = (String)it.next();Integer value = (Integer)map.get(key);System.out.println(key + ":" + value);}}}


输入为:android li zhong yi yi zhong li android

输出结果为:

li:2
zhong:2
android:2
yi:2

思路为:我们把字符串做为HashMap的键,将其出现的次数做为HashMap的值。

 

遍历Map的两种方法:

方法一:

上面程序中使用的就是方法一,使用Map的keySet()方法。

方法二:

看下面程序的遍历方法,使用Map的entrySet()方法。

 

题目:

随机生成50个整数,每个数字的范围是[10,50],统计每个数字出现的次数以及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出来,如果某个数字出现次数为0,则不要打印它。打印时按照数字的升序排列。

最好的方法是使用集合进行实现:

方法一:采用Map+List的方法

package com.sailang.hashmap;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;public class Statistics1{public static void main(String[] args){Map map = new HashMap();//将随机生成的数,放到HashMap中,数字本身作为Key,个数作为Valuefor(int i = 0; i < 50; i++){int randomData = (int)(Math.random() * 41 +10);Integer Key = new Integer(randomData);if(map.get(Key) == null){map.put(Key, new Integer(1));}else{Integer in = (Integer)map.get(Key);in = new Integer(in.intValue() + 1);map.put(Key, in);}}/* * 排序 *///将键值对封装到List中List list = new ArrayList(map.entrySet());//按键值进行排序Collections.sort(list, new Comparator(){public int compare(Object arg0, Object arg1){Map.Entry entry1 = (Map.Entry)arg0;Map.Entry entry2 = (Map.Entry)arg1;return ((Integer)entry1.getKey()).intValue() - ((Integer)entry2.getKey()).intValue();}});System.out.println("排序之后的统计结果:");//输出for(Iterator it = list.iterator(); it.hasNext();){Map.Entry entry = (Map.Entry)it.next();Integer key = (Integer)entry.getKey();Integer value = (Integer)entry.getValue();System.out.println(key + ":" +value);}/* * 寻找出现次数最多的 */System.out.println("出现次数最多的统计结果:");Map.Entry MaxValueEntry = (Map.Entry)Collections.max(list, new Comparator(){public int compare(Object arg0, Object arg1){Map.Entry entry1 = (Map.Entry)arg0;Map.Entry entry2 = (Map.Entry)arg1;return ((Integer)entry1.getValue()).intValue() - ((Integer)entry2.getValue()).intValue();}});for(Iterator it = list.iterator(); it.hasNext();){Map.Entry entry = (Map.Entry)it.next();if(((Integer)MaxValueEntry.getValue()).intValue() == ((Integer)entry.getValue()).intValue()){Integer key = (Integer)entry.getKey();Integer value = (Integer)entry.getValue();System.out.println(key + ":" +value);}}}}

方法二:使用带排序的Map,即TreeMap

package com.sailang.hashmap;import java.util.Collection;import java.util.Collections;import java.util.Iterator;import java.util.Map;import java.util.Random;import java.util.Set;import java.util.TreeMap;public class Statistics2{public static void main(String[] args){Map map = new TreeMap();//用于存放随机生成的数及出现的次数,<key=数字,value=出现次数>Random random = new Random();for(int i = 0; i < 50; i++){int randomNumber = random.nextInt(41) + 10;Integer key = new Integer(randomNumber);if(map.get(key) == null){map.put(key, new Integer(1));}else{Integer value = (Integer)map.get(key);value = new Integer(value.intValue() + 1);map.put(key, value);}}Set set = map.entrySet();for(Iterator it = set.iterator(); it.hasNext();){Map.Entry entry = (Map.Entry)it.next();Integer key = (Integer)entry.getKey();Integer value = (Integer)entry.getValue();System.out.println(key + ":" + value);}/* * 寻找出现次数最多的 */System.out.println("出现次数最多的统计结果:");Collection coll = map.values();Integer maxNumber = (Integer)Collections.max(coll);for(Iterator it = set.iterator(); it.hasNext();){Map.Entry entry = (Map.Entry)it.next();Integer key = (Integer)entry.getKey();Integer value = (Integer)entry.getValue();if(maxNumber.intValue() == value.intValue()){System.out.println(key + ":" + value);}}}}


 

 

 

原创粉丝点击