黑马程序员技术交流社区

标题: 求一个数组中某个元素的重复次数 [打印本页]

作者: star5603    时间: 2014-7-18 10:54
标题: 求一个数组中某个元素的重复次数
本帖最后由 star5603 于 2014-7-18 16:16 编辑

一个随意数组(int、String都行,可以分别讨论),一个元素只存一个字节的元素,想知道数组中某个元素的一共出现了多少次,有哪些方法呢?

作者: icris    时间: 2014-7-18 11:41
本帖最后由 icris 于 2014-7-18 11:49 编辑
  1.         public static int count(Object[] list, Object obj) {
  2.                 int count = 0;
  3.                 for (Object object : list) {
  4.                         if (object.equals(obj)) {
  5.                                 count++;
  6.                         }
  7.                 }
  8.                 return count;
  9.         }
复制代码
数组定义的时候用 Object[] 就行了

作者: star5603    时间: 2014-7-18 12:03
icris 发表于 2014-7-18 11:41
数组定义的时候用 Object[] 就行了

这个是最简单的一种,想要更多的方法。
谢咯。
作者: 苗润    时间: 2014-7-18 12:07
  1. import java.util.*;
  2. class Count
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 String str = "sadjfajdsiljfwqejjs131451413";
  7.                 Map<Character,Integer> map = new TreeMap();
  8.                 getNum(map,str.toString().toCharArray());
  9.                 System.out.println(map);
  10.         }
  11.         public static void getNum(Map<Character, Integer> map,char[] cha)
  12.         {
  13.                 for(char key : cha){

  14.                          Integer value = (Integer) map.get(key);//获取字符目前出现的次数
  15.                          int count = 1;//初始化次数为1
  16.                          if(value != null){
  17.                                  count = value + 1;//如果不是第一个出现,则在原来的次数上+1并赋值给count
  18.                          }
  19.                          map.put(key, count);//将键值对穿进去,如果存在,则更新值,键不变
  20.                          
  21.                 }
  22.         }

  23. }
复制代码
这个是输出字符串中每个字符出现的次数,主要用到的是map集合的存储特性,键值对中键的唯一性。如果键值对在集合中存在了,那么当你在一次存储时,键不变值更新,将整个字符串或者数组遍历后,就将每一个字符出现的次数记录了,最后输出集合就行了


作者: star5603    时间: 2014-7-18 12:26
苗润 发表于 2014-7-18 12:07
这个是输出字符串中每个字符出现的次数,主要用到的是map集合的存储特性,键值对中键的唯一性。如果键值对 ...

count 初始化为1 的话,如果没有,不是会出错吗
作者: 苗润    时间: 2014-7-18 12:35
本帖最后由 苗润 于 2014-7-18 12:39 编辑

有仔细看代码么?只有存的时候才会初始换  你数组里面有什么 才会存什么,没有的去哪了存?像我写的那个  上来给了个字符串,转换为字符数组,并且创建集合,传给了getNum方法,方法内部再根据这个传入的参数往下走的,不会出现你的问题,初始化为1是为了第一次存,在存以前,会先取数据,key为元素,值为次数,如果集合中没有存过,那么就没有key value键值对,没有的话就会取到null 这时候将该元素出现次数初始化为1,再将键值对存到集合中,如果通过key取到了次数,即不是第一次存,那么就将这个次数+1 再存一次进行更新
作者: star5603    时间: 2014-7-18 12:44
苗润 发表于 2014-7-18 12:35
有仔细看代码么?只有存的时候才会初始换  你数组里面有什么 才会存什么,没有的去哪了存?像我写的那个   ...

我的意思是,就拿上面的字符串说,你存入集合进行遍历,当我要找的是原来在字符串当中就没有的,返回count不应该是0吗。
作者: icris    时间: 2014-7-18 12:55
star5603 发表于 2014-7-18 12:44
我的意思是,就拿上面的字符串说,你存入集合进行遍历,当我要找的是原来在字符串当中就没有的,返回coun ...

他的代码是输出字符串中每个字符出现的次数,没有出现的不会查
作者: 苗润    时间: 2014-7-18 13:27
本帖最后由 苗润 于 2014-7-18 13:29 编辑
star5603 发表于 2014-7-18 12:44
我的意思是,就拿上面的字符串说,你存入集合进行遍历,当我要找的是原来在字符串当中就没有的,返回coun ...

这个代码中 每个字符出现的次数 在你运行完毕以后,全部都打印出来了,如果你非得按照你说的,这个代码稍微改一下不就行了,将主方法的打印语句改为
  1. System.out.println(map.get('c'));//将输出语句改为这个,就是制定字符查询次数没有就是返回null,有的话就是次数
复制代码
那个getNum()方法,目的是统计字符串中所有字符出现的次数,跟你查询哪个没有关系,方法内部将字符作为key,次数作为value存入集合,当你指定查询哪个字符出现的次数时,如果在集合中存在对应关系,那么返回value,否则为空 查询语句为上面的哪一行,参数为字符不是字符串,那个‘c’ 仅仅是演示,你可以修改代码,手动输入,或者指定为你需要查询的其他字符

作者: star5603    时间: 2014-7-18 13:32
苗润 发表于 2014-7-18 13:27
这个代码中 每个字符出现的次数 在你运行完毕以后,全部都打印出来了,如果你非得按照你说的,这个代码稍 ...

嗯,我自己去试了下了,多一个方法了,谢啦。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2