### Map集合的扩展:
例子:一个公司类,包括人力资源部门和技术部门。每个部门包括姓名和年龄
要求存入到map集合中。
步骤:
利用嵌套的Map集合
第一个map集合存储公司部门和HashMap<String,String>
HashMap<String,String> 中存储对应的部门人姓名和年龄
Map<String,HashMap<String,Integer>> company = Map<String,HashMap<String,String>>
HashMap<String>
~~~
import java.util.*;
public class MapDemo2{
public static void main(String []args){
Map<String,HashMap<String,Integer>> company = new HashMap<String,HashMap<String,Integer>>();
HashMap<String,Integer> renli = new HashMap<String,Integer>();
HashMap<String,Integer> jishu = new HashMap<String,Integer>();
company.put("renli",renli);
company.put("jishu",jishu);
renli.put("liu",18);
renli.put("li",19);
jishu.put("xu",18);
jishu.put("wang",19);
Set<String> keySet = company.keySet();
Iterator<String> it = keySet.iterator();
while(it.hasNext()){
String bumen = it.next();
System.out.println("公司部门:"+bumen);
HashMap<String,Integer> hs = company.get(bumen);
getInfo(hs);
}
}
public static void getInfo(HashMap<String,Integer> hashMap){
Set<Map.Entry<String,Integer>> entrySet = hashMap.entrySet();
Iterator<Map.Entry<String,Integer>> it = entrySet.iterator();
while(it.hasNext()){
Map.Entry<String,Integer> me = it.next();
String name = me.getKey();
Integer age = me.getValue();
System.out.println("name:"+name+" age:"+age);
}
}
}
~~~
### 算法描述
给出一段字符串,要求输出字符串中每个字符以及字符出现的次数。并且按照字符出现的次数又打到进行排序
例如 输入:"jjjaaabccd"
输出: a(3)j(3)c(2)b(1)d(1)
算法实现:
1、将字符串转换成字符数组
2、定义一个map集合,因为要实现某种顺序,所以要用TreeMap()集合
3、将字符数组与map集合中进行匹对, 如果map中不存在该字符,将字符存入到map的key值中,并将value值+1, 如果存在该字符,将value值取出+1
4、将结果存入到map集合中,并且创建一个比较器实现Comparator方法,按照Value值的大小来进行比较
5、按照格式遍历输出字符串
~~~
import java.util.*;
import java.util.Map.Entry;
public class TreeMapDemo{
public static void main(String []args){
System.out.println("请输入字符串");
Scanner input = new Scanner(System.in);
String str = input.next();
// String str = "aabbbbbccda";
char[] ch = str.toCharArray();
Map<Character,Integer> map = getChar(ch);
if(map.isEmpty())
System.out.println("空字符");
valueSort(map);
}
/**
* 按照value值进行排序
* 思路,将Map集合转换成List集合,利用Collections.sort(list,Comparator<>)方法进行排序
* @param map
*/
public static void valueSort(Map<Character,Integer> map){
System.out.println("--------");
List<Entry<Character, Integer>> list = new ArrayList<Map.Entry<Character,Integer>>(map.entrySet());
Collections.sort(list,new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Entry<Character, Integer> o1,
Entry<Character, Integer> o2) {
return o2.getValue() - o1.getValue();
}
});
Iterator<Entry<Character, Integer>> it = list.iterator();
while(it.hasNext()){
Map.Entry<Character,Integer> me = it.next();
char c = me.getKey();
int v = me.getValue();
System.out.println(c+"("+v+")");
}
}
public static Map<Character,Integer> getChar(char[] ch){
Map<Character,Integer> map = new TreeMap<Character,Integer>();
for(int i=0;i<ch.length;i++){
if(ch[i]<'a'&&ch[i]>'z'||ch[i]<'A'&&ch[i]>'Z')
continue;
Integer value = map.get(ch[i]); //通过key值获取map中存入的value值
if(value == null){ //如果value为空,表示map中不存在该字符,我们将它存入到map中
map.put(ch[i],1);
}else{ //如果不为空,表示map中已经存在该字符,我们将value值+1在存入到map中
value++;
map.put(ch[i],value);
}
}
return map;
}
}
~~~