【Java方法】统计数组内元素的种类数及每种元素的数量
我们假定一个一维数组
1、统计数组内元素的种类数
import java.util.*;
public class ArrayCountExample1 {
public static int arraycount(int [] a) {
//计算一维数组的长度
int n = a.length;
//将数组拷贝到新的地址,这样对新数组操作不会改变原数组
int [] tmp = new int [n];
System.arraycopy(a, 0, tmp, 0, n);
//统计元素种类数
int Num = 1;
//将数组按元素大小重新排序
Arrays.sort(tmp);
for(int i = 1; i < n; i ++) {
if (tmp[i] != tmp[i-1]) {
Num ++;
}
}
return Num;
}
public static void main(String[] args) {
// 数组a
int [] a = {1,2,3,2,2,3,1,3,2,1,2,3,1,2,1,2,3,2,1};
int aNum = arraycount(a);
System.out.println("数组a的元素种类数为:" + aNum);
}
}
结果:
数组a的元素种类数为:3
2、统计数组内每种元素的数量
import java.util.*;
public class ArrayCountExample2 {
public static void main(String[] args) {
int [] a = {1,2,3,2,2,3,1,3,2,1,2,3,1,2,1,2,3,2,1};
//计算一维数组的长度
int n = a.length;
//将数组拷贝到新的地址,这样对新数组操作不会改变原数组
int [] tmp = new int [n];
System.arraycopy(a, 0, tmp, 0, n);
//统计元素种类数
int Num = 1;
//将数组按元素大小重新排序
Arrays.sort(tmp);
for(int i = 1; i < n; i ++) {
if (tmp[i] != tmp[i-1]) {
Num ++;
}
}
//用于存储不同元素的数组
int [] b1 = new int [Num];
//用于存储元素数量的数组
int [] b2 = new int [Num];
for (int i = 0; i < Num; i ++) {
b2[i] = 1;
}
//b1与b2的指针
int j = 0;
for(int i = 1; i < n; i ++) {
if (tmp[i] == tmp[i-1]) {
b1[j] = tmp[i];
b2[j] ++;
}
else {
j ++;
b1[j] = tmp[i];
}
}
System.out.println("数组a的元素种类为:" + Num);
System.out.println("数组a的不同元素列表" + b1);
System.out.println("数组a不同元素的数量列表" + b2);
}
}
结果
数组a的元素种类为:3
数组a的不同元素列表[I@5c8da962 [1, 2, 3]
数组a不同元素的数量列表[I@512ddf17 [6, 8, 5]