*** 在做题的时候发现, 通过.toArray() 方法生成的数组为Object类型, 即便需要比较的对象同样是char类型生成的set集合, 但仍无法将新数组与老char数组直接比较.
** Object 类型不好直接转成char, 因此思路是将Object 和 char 都转换为String类型,再通过equals方法进行比较
* 在后面将提供一个案例, 统计字符串"abcdaabbddefc"中各个字母共出现过几次.
假设Object类型的元素为 a,
String temp1 = a.toString(); // 就可以转换为String 类型.
假设char类型元素为c,
String temp2 = String.valueOf(c); //可以实现将c转换为String类型
通过equals()方法实现比较
boolean f = temp1.equals(temp2);
public class Demo04 {
public static void main(String[] args) {
//统计字符串中各个字母共出现过几次
String str = "abcdaabbddefc";
char[] arr = str.toCharArray();
//使用set集合可以去重复
//使用数组遍历, 将char元素添加到set集合
HashSet<Character> set = new HashSet<Character>();
for (char c : arr) {
set.add(c);
}
//得到了一个set集合,集合长度set.size();
Object[] brr = set.toArray();
//如何统计出现的次数, 首先需要知道有哪几个字母(brr[i]),然后遍历arr数组,判断是否相等,并计数
//brr是Object类, arr是char类, 需要进行转换
//将Object转成String brr[i].toString();
//将arr转换成String String.valueOf(arr[i]);
//新的问题是计数,仍需要一个循环对计数,使得count的数量与set.size()相等
//将计数count放在第一次循环内
HashMap<Object,Integer>map=new HashMap<Object,Integer>();
for (int i = 0; i < brr.length; i++) {
int count =0;
for (int j = 0; j < arr.length; j++) {
String temp = String.valueOf(arr[j]);
if (temp.equals(brr[i].toString())) {
count++;
}
}
map.put(brr[i], count);
}
System.out.println(map);
}
}