在下刚学了集合,就用集合实现了一下,希望对楼主有所帮助:
/**
*
* @author zhang
思路:
因为数字和次数之间存在映射关系,想到了map集合。,
根据给予的数组,并把数字作为键,去查map集合。
如果没有对应的值,将该数字作为键。将1作为值存储到map集合中。
如果有对应的值,将该值取出并自增,将该数字和自增后的结果存储到map集合中。
这样,键重复出现,新值会覆盖旧值。
记录了这个数字的最新出现的次数。
当给定的数组中的数字都遍历完成后,map集中就记录所有数字的次数。
步骤:
1,定义map集合。
2,遍历数组。
3,将遍历到的每一个数字作为键去查map集合。
4,对通过该键获取到的值进行判断。
*
*/
public class CountDemo {
public static void main(String[] args) {
int[] a={1,3,7,9,5,9,4,3,6,1,7};
Map map = getCharCount(a);
Set keys = map.keySet();
Iterator it = keys.iterator();
System.out.println("以下的数字出现的次数都是一次:");
while(it.hasNext()){
Integer key = (Integer) it.next();
System.out.print(key+" ");
}
}
public static Map getCharCount(int[] str)
{
//1,定义map集合。所以使用TreeMap。
//集合中的键的类型时Integer,值的类型时Integer、
Map map = new TreeMap();
int count = 0;
//2,遍历数组。
for(int x=0; x<str.length; x++)
{
int in = str[x];
//将遍历到的数字作为键,去查map集合中对应的值。
Integer value = (Integer)map.get(str[x]);
if(value!=null)
{
count = value;
}
count++;
map.put(str[x],count);
count = 0;
}
return getMaxCount(map);
}
//获取次数为1的数字
private static Map getMaxCount(Map map) {
Set keySet = map.keySet();
//返回一个包含此 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型
Integer[] arr = (Integer[]) keySet.toArray(new Integer[keySet.size()]);
Map valueMap = new TreeMap();
Integer min =1;
for (int ii=0;ii<arr.length;ii++) {
if((Integer)map.get(arr[ii])==min) {
Integer key = arr[ii];
Integer value = (Integer)map.get(arr[ii]);
valueMap.put(key, value);
}
}
return valueMap;
}
}
输出的结果为:
以下的数字出现的次数都是一次:
4 5 6 |