A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我为你着迷 金牌黑马   /  2014-11-19 00:20  /  988 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;

  2. class MapTest3
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                         String s=charCount("aabffwkaogafggbvdd");
  7.                        
  8.                         System.out.println(s);
  9.         }
  10.        
  11.         public static String charCount(String str)
  12.         {
  13.                 char[] chs=str.toCharArray();
  14.                
  15.                 TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();
  16.                
  17.            int count=0;
  18.           
  19.                 for(int x=0;x<chs.length;x++)
  20.                 {
  21.                                 if(!(chs[x]>='a'&&chs[x]<='z'||chs[x]>='A'&&chs[x]<='Z'))
  22.                                    continue;
  23.                                                
  24.                                 Integer value=tm.get(chs[x]);
  25.                                
  26.                           if(value!=null)
  27.                                           count=value;
  28.                           count++;
  29.                           tm.put(chs[x],count);
  30.                           
  31.                           count=0;
  32.                           /*
  33.                                 if(value==null)
  34.                                 {
  35.                                         tm.put(chs[x],1);               
  36.                                 }
  37.                                 else
  38.                                 {
  39.                                         value=value+1;
  40.                                         tm.put(chs[x],value);       
  41.                                 }
  42.                                 */
  43.                 }
  44.                
  45.                
  46.                  StringBuilder sb=new StringBuilder();
  47.                  
  48.                  Set<Map.Entry<Character,Integer>> entrySet=tm.entrySet();
  49.                  Iterator<Map.Entry<Character,Integer>> it=entrySet.iterator();
  50.                  
  51.                  while(it.hasNext())
  52.                  {
  53.                                  Map.Entry<Character,Integer> me=it.next();
  54.                                  Character ch=me.getKey();
  55.                                  Integer value=me.getValue();
  56.                          sb.append(ch+"("+value+")");       
  57.                  }
  58.                  
  59.                  return sb.toString();
  60.         }
  61. }
复制代码

大家好  就是代码中注释的部分value=value+1; 这句话是什么意思呀   没听懂    请问value的值一开始在内存中是0吗  哪位仁兄帮我解释下啊 谢谢了   黑马币无限奉上啊

评分

参与人数 1技术分 +1 收起 理由
MVP + 1

查看全部评分

6 个回复

倒序浏览
你的注释部分做的事是:
判断集合中是否已经存有chs[x] 如果没有 就将chs[x]存入 value值定位1
如果已经成存在 那么将chs[x]对应的值递增1

评分

参与人数 1黑马币 +10 收起 理由
我为你着迷 + 10 谢谢

查看全部评分

回复 使用道具 举报
本帖最后由 kerner 于 2014-11-19 13:10 编辑

Integer value=tm.get(chs[x]);// value为引用变量,可以自动拆箱当做基本类型int用。比如:Integer value = 8;
该表达式表示Map集合如果有该键(chs[x])存在的键值对,则返回该键(chs[x])对应的值,没有则返回NULL;
  •                                if(value==null)
  •                                 {
  •                                         tm.put(chs[x],1);    //没有该字母对应的键值对,则第一次存入,对应的值为1;
  •                                 }
  •                                 else
  •                                 {
  •                                         value=value+1;      //不为NULL,则代表有该字母对应的键值对,值为value,因为现在又有一次,所以要再加1.
  •                                         tm.put(chs[x],value);
  •                                 }
   
源代码如下::
public V get(Object key) {
        Entry<K,V> p = getEntry(key);
        return (p==null ? null : p.value);
    }



评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
MVP + 1
我为你着迷 + 10 谢谢

查看全部评分

回复 使用道具 举报
value=value+1;
就是为了将该字符出现的次数进行加1;如果该字符已经存在该map集合中,那么在原有的基础上加1,如果没有,那么就在0的基础上加1

评分

参与人数 1黑马币 +10 收起 理由
我为你着迷 + 10 赞一个!

查看全部评分

回复 使用道具 举报
zhangyangLengen 发表于 2014-11-19 08:29
value=value+1;
就是为了将该字符出现的次数进行加1;如果该字符已经存在该map集合中,那么在原有的基础上 ...

我想问下value值一开始在内存中默认值是多少啊     它是引用型变量吗
回复 使用道具 举报
我为你着迷 发表于 2014-11-19 09:47
我想问下value值一开始在内存中默认值是多少啊     它是引用型变量吗

Integer value = tm.get(chs[x]) ;
// value是引用变量(实例变量),因为这条代码存在于成员方法中,所以value变量分配在栈中,故称为局部变量。局部变量必须手动初始化,故初始化为tm.get(chs[x]),从该函数源码可以看出(该函数返回null或者V型,V型也就是TreeMap<Character,Integer>中代表的Integer型)。如果没有键chs[x]对应的值,则返回null,初始化引用变量value=null。否则返回Integer类型的实例初始化value引用变
//如果是引用变量存在于类当中,为成员变量,不必显示初始化,则编译器会帮我们默认初始化为null

jdk5新特性,增加了基本数据和相应的对象之间相互自动转换,称为基本数据类型的自动拆箱和自动装箱;
自动装箱:允许把一个基本数据类型的值直接赋值给基本类型的类实例。

Integer number = 100;
int m = 100;
Integer number = m;
上面的装箱类似于:
Integer number = Integer.valueOf(m);

自动拆箱:基本类型的类实例直接赋值给基本数据类型或者基本数据类型的类实例当做基本数据类型使用。
int x = number +number ;
上面的拆箱类似于:
int x = number.intValue() + number.intValue()


故:value = value +1;
相当于 value =Integer.valueOf(  value.intValue() +1 )




评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
当你定义这个Integer value 这个值时,而且这个是引用类型,有默认值,有默认值null。
就像你有一个类,当你实例化这个类时,类中的数据成员都有默认值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马