set与map
案例:
统计字符串aasdsaaadccdc中的重复字符的个数
打印格式:
a(5)
c(3)
d(3)
s(2)
方法1
思路:根据set集合的去重复性,先拿到其中的键
根据键与字符串中的字符一一比较,个数++;
package com.westos.morning;
import java.util.*;
/**
* @Author: Administrator
* @CreateTime: 2019-01-13 10:56
*/
public class 统计字符出现的个数 {
public static void main(String[] args) {
String s = "aasdsaaadccdc";
String[] split = s.split("");
//数组转集合,可以去除其中的重复元素,拿到键值
HashSet<String> hashSet = new HashSet<String>(Arrays.asList(split));
TreeMap<String, Integer> hashMap = new TreeMap<>();
for (String s1 : hashSet) {
int num=0;
for (int i = 0; i < split.length; i++) {
if(s1.equals(split[i])){
num++;
}
}
hashMap.put(s1,num);
}
Set<Map.Entry<String, Integer>> entries = hashMap.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
System.out.println(entry.getKey()+"("+entry.getValue()+")\t");
}
}
}
方法2–巧妙的方法
先对排序字符,然后后,遍历从后找和从前找,索引相减+1,
package com.westos.morning;
import java.util.Arrays;
/**
* @Author: Administrator
* @CreateTime: 2019-01-13 11:51
*/
public class 统计字符出现的个数2 {
public static void main(String[] args) {
String str = "aasdsaaadccdc";
char[] chars = str.toCharArray();
Arrays.sort(chars);
String s = String.valueOf(chars);
for (int i = 0; i < chars.length;) {
System.out.println(chars[i]+"("+(s.lastIndexOf(chars[i])-s.indexOf(chars[i])+1)+")");
i+= (s.lastIndexOf(chars[i]) - s.indexOf(chars[i]) + 1);
}
}
}
方法3
两层遍历,外层当作键,内层当作值,找个数++;
package com.westos.morning;
import java.util.HashMap;
/**
* @Author: Administrator
* @CreateTime: 2019-01-13 12:40
*/
public class 统计字符出现的个数3 {
public static void main(String[] args) {
String str = "aasdsaaadccdc";
HashMap<Character, Integer> hashMap = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
int num = 0;
for (int j = 0; j < str.length(); j++) {
char c1 = str.charAt(j);
if(c==c1){
num++;
}
}
hashMap.put(c,num);
}
System.out.println(hashMap);
}
}
方法4
循环,追个拿到字符,判断集合中有无,
无则添加进去,个数置1.
有的话,根据键去除值,值加1,然后添加覆盖旧值.
package com.westos.morning;
import java.util.HashMap;
/**
* @Author: Administrator
* @CreateTime: 2019-01-13 13:21
*/
public class 统计字符串出现的个数4 {
public static void main(String[] args) {
String str = "aasdsaaadccdc";
HashMap<Character, Integer> hashMap = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if(!hashMap.containsKey(c)){
hashMap.put(c,1);
}else {
Integer integer = hashMap.get(c);
integer++;
hashMap.put(c,integer);
}
}
System.out.println(hashMap);
}
}
结果
a(5)
c(3)
d(3)
s(2)
Process finished with exit code 0
谢谢!