谁能讲解下统计“a,b,c,a,a,b,上海,上海”的思路 遍历一遍吧,每次遍历前先判断集合中是否存在该key,如果有了则将value值+1时间效率 O(n)最直观的算法,坐等楼下更快的算法~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在csdn包下,写了一个,参考一下吧。。期待更好的方法package csdn;import java.util.HashSet;import java.util.LinkedHashMap;import java.util.Map;import java.util.Scanner;import java.util.Set;public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Set<String> set = new HashSet<String>(); Map<String,Integer> map = new LinkedHashMap<String, Integer>(); String str; Scanner sc = new Scanner(System.in); str = sc.next(); String t[] = str.split(","); for(String s :t){ if(!set.add(s)){//不能添加成功说明set中已经有了 map.put(s, map.get(s)+1); }else{ map.put(s, 1); } } for(String key : map.keySet()){ System.out.println(key + ":"+ map.get(key)); } }} 运行时在控制台输入“a,b,c,a,a,b,上海,上海”即可。用LinkedHashMap是保证你字母的顺序,如果不想用那就换成HashMap吧。还有就是for循环里面if else可以反过来写阅读性更好一点。。 运行时在控制台输入“a,b,c,a,a,b,上海,上海”即可。用LinkedHashMap是保证你字母的顺序,如果不想用那就换成HashMap吧。还有就是for循环里面if else可以反过来写阅读性更好一点。。期待更优的办法 最好的办法是使用HashMap实现.注:HashSet是基于HashMap的实现.具体可看JDK源码.HashMap的实现就比较简单了.主体代码如下:public void main(String[] args){ String[] arr = new String[]{"a","b","c","a","a","上海","上海"}; Map<String,Integer> map = new HashMap<String,Integer>(); for(String str : arr){ if(map.containsKey(str)){ map.put(str, map.get(str)+1); }else{ map.put(str, 1); } }} +1说好的让用HashSet实现呢? import java.util.HashSet;import java.util.Set;import java.util.regex.Matcher;import java.util.regex.Pattern;public class TotalCount { public static void main(String[] args) { String abc = "a,b,c,a,a,b,上海,上海"; String[] a = abc.split(","); String temp = ""; Set sets = new HashSet(); for (int i = 0; i < a.length; i++) { if (!temp.equals(a[i])) { temp = a[i]; Pattern pt = Pattern.compile(a[i]); Matcher m = pt.matcher(abc); int index = 0; while (m.find()) { index++; } sets.add(a[i]+":"+index);//利用set中不允许有重复项,让JVM自动处理 } } System.out.println(sets.toString()); }}输出结果:[b:2, c:1, 上海:2, a:3] 求java 用exchange 发送邮件 java调用matlab生成的类时候出现错误,报错如下 我想看下AWT或者Swing的源码,请问哪里有下载的? 请高手帮忙看看是什么问题 GIF如何去掉背景黑色,让背景为透明 不同编码对应什么 或者什么是不同编码的界限 谁有这个包com.borland.jbcl.layout.* 不是高手不要看 向大伙寻求技术支持:JAVA应用程序提供接口的方法,急待!!!(附详细说明:)) 个人对于JAVA和C#未来的一些想法,拿出来和大家讨论一下! 为什么没结果 JDK无法安装
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;public class Test { public static void main(String[] args) {
// TODO Auto-generated method stub
Set<String> set = new HashSet<String>();
Map<String,Integer> map = new LinkedHashMap<String, Integer>();
String str;
Scanner sc = new Scanner(System.in);
str = sc.next();
String t[] = str.split(",");
for(String s :t){
if(!set.add(s)){//不能添加成功说明set中已经有了
map.put(s, map.get(s)+1);
}else{
map.put(s, 1);
}
}
for(String key : map.keySet()){
System.out.println(key + ":"+ map.get(key));
}
}}
还有就是for循环里面if else可以反过来写阅读性更好一点。。
还有就是for循环里面if else可以反过来写阅读性更好一点。。
期待更优的办法
注:HashSet是基于HashMap的实现.具体可看JDK源码.
HashMap的实现就比较简单了.主体代码如下:public void main(String[] args){
String[] arr = new String[]{"a","b","c","a","a","上海","上海"};
Map<String,Integer> map = new HashMap<String,Integer>();
for(String str : arr){
if(map.containsKey(str)){
map.put(str, map.get(str)+1);
}else{
map.put(str, 1);
}
}
}
+1
说好的让用HashSet实现呢?
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class TotalCount {
public static void main(String[] args) {
String abc = "a,b,c,a,a,b,上海,上海";
String[] a = abc.split(",");
String temp = "";
Set sets = new HashSet();
for (int i = 0; i < a.length; i++) {
if (!temp.equals(a[i])) {
temp = a[i];
Pattern pt = Pattern.compile(a[i]);
Matcher m = pt.matcher(abc);
int index = 0;
while (m.find()) {
index++;
}
sets.add(a[i]+":"+index);//利用set中不允许有重复项,让JVM自动处理
}
}
System.out.println(sets.toString());
}
}输出结果:[b:2, c:1, 上海:2, a:3]