**
1. 统计int类型的数组中个数字出现的次数
`//用新数组统计元素个数
public static void counNum(int [] arr){
int max =arr[0];
for (int y = 0 ; y < arr.length ; y ++){
if(arr[y]>max){
max = arr[y];
}
}
//以arr数组的最大值当作elements的长度
int [] elements = new int[max+1];//把arr数组的元素当作elements的下标,如果元素重复,则elements此下标位置的值+1
for (int i = 0; i < arr.length; i++) {
elements[arr[i]]++;//elements[x]表示elements数组中的第x个元素的值,初始值为0,++时,此元素的值加1
}
for (int i = 0; i < elements.length; i++) {
if(elements[i]!=0){
//此时的i就是arr数组的元素
System.out.println(i+"出现了"+elements[i]+"次");
}
}
}`
//用map统计元素个数
public static void count(int [] arr){
TreeMap<Integer ,Integer> tree = new TreeMap<>();
//遍历数组存入map中
for (int i = 0 ; i < arr.length ; i++){
int a =arr[i];
tree.put(a,!tree.containsKey(a)?1:tree.get(a)+1);
}
for (Integer set :tree.keySet()){
System.out.println(set +"出现的次数为"+tree.get(set));
}
}
//没有参考别人的代码,全部是自己的思路,有点麻烦,但是能运行出来
public static void mart(int []arr){
//把数组进行排序,把相同的数字放在一起,拿后面的数字和前一个比较,相同就加1,不相同就输出个数为1;
Arrays.sort(arr);
int j = 1;
for(int i = 1 ; i < arr.length; i ++){
if(arr[i]==arr[i-1]){
j++;
}else{
System.out.println(arr[i-1]+"的个数是:"+j);
j=1;
}
//如果是最后一个且与前面的数不同,说明倒数第二个已经输出过了,把最后一个输出,个数为1
if(i==arr.length-1&&arr[arr.length-1]!=arr[arr.length-1-1]){
System.out.println(arr[arr.length-1]+"的个数是:"+j);
j=1;
//如果是最后一个且与前面的相同,说明前面一个也没有输出,输出最后一个及其个数
}else if(i == arr.length -1&&arr[arr.length-1]==arr[arr.length-1-1]){
System.out.println(arr[arr.length-1]+"的个数是:"+j);
j=1;
}
}
}
2,统计字符串中元素的个数
1)数组形式存储的字符串
String [] arr = {"中国","足球","形式","姓氏","中国","姓氏"};
TreeMap<String ,Integer> tree = new TreeMap<>();
for(int i = 0 ; i < arr.length;i++){
tree.put(arr[i],tree.containsKey(arr[i])?tree.get(arr[i])+1:1);
}
for (String s :tree.keySet()
) {
System.out.println(s+"出现的次数是"+tree.get(s)+"次");
}
2),String定义的字符串
String [] arr = {"中国","足球","形式","姓氏","中国","姓氏"};
TreeMap<String ,Integer> tree = new TreeMap<>();
for(int i = 0 ; i < arr.length;i++){
tree.put(arr[i],tree.containsKey(arr[i])?tree.get(arr[i])+1:1);
}
for (String s :tree.keySet()
) {
System.out.println(s+"出现的次数是"+tree.get(s)+"次");
}
类似的题型还有很多,但是题不在多,而在于举一反三…静下来对这些代码做一个总结发现,类似的题型有一套通用的思路
- 把被统计的数据分解成要求统计的类型,如Int类型要求某个数字出现的次数,就分割成int小数组,即要统计啥就分割成啥类型的数组
- 遍历小数组,利用TreeMap把元素当作键,个数当作值来存储,
- 遍历TreeMap即可,利用其中的get()和keySet()