java 求一个list集合中出现次数最多的一项,和此项的出现次数,有简单的办法吗?

2024-12-25 10:05:17
推荐回答(4个)
回答1:

效率很高的统计方法。利用正则表达式统计
String str;
String regex;
Pattern p;
Matcher m;
@Test
public void st() {
List list = new ArrayList();
list.add("aa");
list.add("aa");
list.add("aa");
list.add("aa");
list.add("bb");
list.add("bb");
list.add("cc");
list.add("cc");
list.add("dd");
list.add("ed");
//
String tmp = "";
String tot_str = list.toString();
//System.out.println(tot_str);
int max_cnt = 0;
String max_str = "";
for(String str : list) {
if (tmp.equals(str)) continue;
tmp = str;
regex = str;
p = Pattern.compile(regex);
m = p.matcher(tot_str);
int cnt = 0;
while(m.find()) {
cnt++;
}
//System.out.println(str + ":" + cnt);
if (cnt > max_cnt) {
max_cnt = cnt;
max_str = str;
}
}
System.out.println("字符串 " + max_str + " 出现的最大次数:"+ max_cnt) ;
}

回答2:

Pattern和Matcher在java.util.regex中,有简单的方法,但是不一定是快的方法,既然要找出次数最多的,势必要遍历list,不然不可能知道它其中的值。

回答3:

简单点,定义计数器作用的变量,比如:int count_aa=0,在循环判断,是哪一项就加一,count++。

回答4:

复制出来一份,然后从第一个开始和后面对比,一样的就删除掉,并记录值和出现次数,循环一边后判断不为空在从第一个开始,以此循环直到删除完。

做net的不知道java代码咋写。