Java HashMap用于计数数组项
如何使用HashMap计算此数组中唯一项的数量:Java HashMap用于计数数组项,java,arrays,hashmap,Java,Arrays,Hashmap,如何使用HashMap计算此数组中唯一项的数量: import java.util.Scanner; public class Entry { private Scanner scan = new Scanner(System.in); public void userInput(){ Scanner scan = new Scanner(System.in); System.out.println("Please tell me the amount of numbers yo
import java.util.Scanner;
public class Entry {
private Scanner scan = new Scanner(System.in);
public void userInput(){
Scanner scan = new Scanner(System.in);
System.out.println("Please tell me the amount of numbers you will be entering (Up to 50): ");
int [] arr = new int[scan.nextInt()];
for(int i=0;i<arr.length; i++) {
scan = new Scanner(System.in);
System.out.println("Please enter a number: ");
while(scan.hasNextInt()){
int x = scan.nextInt();
arr[i]= x;
break;
}
}
System.out.println(" ");
System.out.println("Results of Data Entry");
System.out.println("_____________________");
for(int i:arr){System.out.println(i + " occurs ");
}
}
}
CountOccurrences的助手函数如下所示:
public static Map<Integer, Integer> countOccurences (int[] arr) {
int len = arr.length;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < len; i++) {
int key = arr[i];
if (map.containsKey(key)) {
int value = map.get(key);
map.put(key, value + 1);
} else {
map.put(key, 1);
}
}
return map;
}
以上代码应该很容易阅读,如果你需要解释,请让我知道
完整的代码如下所示,请注意Hashmap是如何迭代的:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
public class main {
private Scanner scan = new Scanner(System.in);
public static void main(String args[]) {
userInput();
}
public static void userInput() {
Scanner scan = new Scanner(System.in);
System.out
.println("Please tell me the amount of numbers you will be entering (Up to 50): ");
int[] arr = new int[scan.nextInt()];
for (int i = 0; i < arr.length; i++) {
scan = new Scanner(System.in);
System.out.println("Please enter a number: ");
while (scan.hasNextInt()) {
int x = scan.nextInt();
arr[i] = x;
break;
}
}
System.out.println(" ");
System.out.println("Results of Data Entry");
System.out.println("_____________________");
Map<Integer, Integer> counts = countOccurences (arr);
Iterator itr = counts.entrySet().iterator();
while (itr.hasNext()) {
Map.Entry pairs = (Map.Entry)itr.next();
System.out.println(pairs.getKey() + " occurs " + pairs.getValue());
}
}
public static Map<Integer, Integer> countOccurences (int[] arr) {
int len = arr.length;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < len; i++) {
int key = arr[i];
if (map.containsKey(key)) {
int value = map.get(key);
map.put(key, value + 1);
} else {
map.put(key, 1);
}
}
return map;
}
}
试试这个。。你会得到你想要的
'public static void main(String args[])
{
int cnt=1;
Integer a;
Integer arr[] = {1,2,2,3,1,4,5,3,3,3};
Map hm = new HashMap<Integer, Integer>();
for(int i=0;i<arr.length;i++)
{
a=(Integer) hm.put(arr[i], cnt);
if(a!=null)
{
hm.put(arr[i],a+1);
}
}
Set set = hm.entrySet();
// Get an iterator
Iterator it = set.iterator();
// Display elements
while(it.hasNext()) {
Map.Entry me = (Map.Entry)it.next();
System.out.print(me.getKey() + " occurs ");
System.out.println(me.getValue());
}
}'
Map接口的putK,V方法返回同一个键的上一个值,如果第一次设置该键,则返回null。该问题的答案告诉我什么都没有。看在上帝的份上,从已经链接的问题中可以看出,您不必执行scan=new ScannerSystem.in;两次。一次就够了。这是家庭作业问题吗?行得通!有没有不使用公共静态的方法呢?在最初的问题中,您可以在不使用公共静态的情况下将函数private Map countoccurrencess int[]arr添加到实体类中。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
public class main {
private Scanner scan = new Scanner(System.in);
public static void main(String args[]) {
userInput();
}
public static void userInput() {
Scanner scan = new Scanner(System.in);
System.out
.println("Please tell me the amount of numbers you will be entering (Up to 50): ");
int[] arr = new int[scan.nextInt()];
for (int i = 0; i < arr.length; i++) {
scan = new Scanner(System.in);
System.out.println("Please enter a number: ");
while (scan.hasNextInt()) {
int x = scan.nextInt();
arr[i] = x;
break;
}
}
System.out.println(" ");
System.out.println("Results of Data Entry");
System.out.println("_____________________");
Map<Integer, Integer> counts = countOccurences (arr);
Iterator itr = counts.entrySet().iterator();
while (itr.hasNext()) {
Map.Entry pairs = (Map.Entry)itr.next();
System.out.println(pairs.getKey() + " occurs " + pairs.getValue());
}
}
public static Map<Integer, Integer> countOccurences (int[] arr) {
int len = arr.length;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < len; i++) {
int key = arr[i];
if (map.containsKey(key)) {
int value = map.get(key);
map.put(key, value + 1);
} else {
map.put(key, 1);
}
}
return map;
}
}
'public static void main(String args[])
{
int cnt=1;
Integer a;
Integer arr[] = {1,2,2,3,1,4,5,3,3,3};
Map hm = new HashMap<Integer, Integer>();
for(int i=0;i<arr.length;i++)
{
a=(Integer) hm.put(arr[i], cnt);
if(a!=null)
{
hm.put(arr[i],a+1);
}
}
Set set = hm.entrySet();
// Get an iterator
Iterator it = set.iterator();
// Display elements
while(it.hasNext()) {
Map.Entry me = (Map.Entry)it.next();
System.out.print(me.getKey() + " occurs ");
System.out.println(me.getValue());
}
}'