javaseday19(Map获取字母个数 查表法)

来源:互联网 发布:可利电气经营数据 编辑:程序博客网 时间:2024/05/19 23:26
// 用enterSet 可以获取key 和value

// 用keySet 只能获取key上的 然后通过key获取value

HahMap 和HashSet 是无序的 表明的是存和取不同 即通过了存的元素的hashCode 排序

如果需要有序 就使用HashLinkedMap 有序的意义是 怎么存怎么取

/*
 * 联系
 * "asdsawfdcx" 获取该字符串中每个字母出现的个数
 * 要求打印的结果是a(2) b(1)
 * 对于结果的分析发现 字母和次数之间存在着映射的关系 而且这种关系很多
 * 很多就需要存储 能存储映射关系的容器有数组和Map集合
 * 关系中一方是有序编号么 ?没有
 * 那就是使用Map集合 又发现可以保证唯一性的一方具备着顺序 如 a b c ...
 * 所以可以使用TreeMap集合
 *
 * 这个集合最终对应存储的是字母和次数的对应关系
 *
 * 1、因为操作的是字符串的字母 所以先将字符串变成字符数组
 * 2、遍历字符数组 用每一个字母作为键去查Map集合这个表
 * 如果该字母键不存在就将该字母作为键1作为值存储到map集合中
 * 如果该字母键存在 就将该字母键对应值取出并+1 再将该字母和+1后的值存储到map集合中
 * 键相同值会覆盖 这样就记录住了该字母的次数
 * 3、遍历结束map集合就记录所有字母的出现的次数
 *
 */
public class HashLinkedMap {
public static void main(String[] args) {
String str = "asdsaAwfdcx";


String s = getCharCount(str);


System.out.println(s);
}


public static String getCharCount(String str) {


//将字符串变成字符数组 忘了 但是知道结果 所以char[] cha = str. 看方法
char[] cha = str.toCharArray();


//定义map集合
Map<Character,Integer> map = new TreeMap<Character,Integer>();


for (int i = 0; i < cha.length; i++) {


if(!(cha[i]>='a' && cha[i]<='z' ||cha[i]>='A' && cha[i]<='Z'))
continue;//continue是跳出本次循环继续下次


//将数组中的字母作为键去查表
Integer value = map.get(cha[i]) ;
int count = 1;
//判断值是否为空
if(value!=null){
count = value+1;
}


map.put(cha[i], count);
/*if(value==null){
map.put(cha[i], 1);
}else{
map.put(cha[i], value+1);
}*/




}


return mapToString(map);
}


private static String mapToString(Map<Character, Integer> map) {
StringBuilder sb= new StringBuilder();


Iterator<Character> it = map.keySet().iterator();


while(it.hasNext()){
Character key = it.next();
Integer value = map.get(key);


sb.append(key+"("+value+")");
}
return sb.toString();
}
}


public class MapTest01 {
/*
* Map在有映射关系时 可以优先考虑
*
* 在查表法中的应用较为常见
*/
public static void main(String[] args) {
int week = 1;


System.out.println(getWeek(1));
System.out.println(getWeekByMap(getWeek(1)));
}


public static String getWeekByMap(String week){
Map<String,String> map = new HashMap<String,String>();


map.put("星期一", "Mon");//集合也是对象 能放在value里面
map.put("星期二", "Tus");
map.put("星期三", "Wes");
map.put("星期四", "Th");
map.put("星期五", "Fir");
map.put("星期日", "Sun");
map.put("星期天", "Sun");


return map.get(week);
}


public static String getWeek(int week){


if(week<1||week>7){
throw new RuntimeException("没有对应的星期 ");
}
String[] weeks ={"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};


return weeks[week];
}
}

原创粉丝点击