参数是需要统计的顶级类,及类的集合
通过键值对map来统计数据
逐个取出累计类别出现次数

继承HashMap,使用泛型
类名TypeCounter

个人实现:

package thinking;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;import javax.management.RuntimeErrorException;public class TypeCounter extends HashMap<Class<?>, Integer> {Class<?> baseType;public TypeCounter(Class baseType){this.baseType = baseType;}void count(Object obj){Class<?> objClass= obj.getClass();if(!baseType.isAssignableFrom(objClass)){throw new RuntimeException("未有此子类");}countClass(objClass);}void countClass(Class<?> t){put(t, get(t)==null?1:get(t)+1);Class<?> superClass= t.getSuperclass();if(baseType.isAssignableFrom(superClass) && superClass!=null){countClass(superClass);}}public String toString(){String result = null;for(Class<?> key:this.keySet()){result = key.getSimpleName()+":"+this.get(key);}return result;}public static void main(String[] args){List<Integer> list = new ArrayList<Integer>();list.add(12);list.add(24);TypeCounter typeCounter = new TypeCounter(ArrayList.class);typeCounter.count(list);System.out.println(typeCounter);}}

原书实现:

package thinking;import java.util.HashMap;
import java.util.Map;public class TypeCounter extends HashMap<Class<?>, Integer> {private Class<?> baseType;public TypeCounter(Class<?> baseType){this.baseType = baseType;}public void count(Object obj){Class<?> type= obj.getClass();if(!baseType.isAssignableFrom(type)){throw new RuntimeException(obj+" incorect type: "+type+",should be type or be subtype of "+ baseType);}countClass(type);}private void countClass(Class<?> type) {Integer quantity = get(type);put(type, quantity==null?1:quantity+1);Class<?> supClass = type.getSuperclass();if(supClass!=null && baseType.isAssignableFrom(supClass)){countClass(supClass);}}public String toString(){StringBuilder result = new StringBuilder("{");for(Map.Entry<Class<?>, Integer> pair : entrySet()){result.append(pair.getKey().getSimpleName());result.append("=");result.append(pair.getValue());result.append(", ");}result.delete(result.length()-2, result.length());result.append("}");return result.toString();}  }

Thinking in Java 14.3.3递归计数相关推荐

  1. mysql vue 菜谱_vue+ java 实现多级菜单递归效果

    效果如图: 大概思路:树形视图使用的是vue官方事例代码,java负责封装数据,按照vue官方事例的数据结构封装数据即可.有两个需要关注的点: 1.官方事例的数据结构是一个对象里面包含着集合,而不是一 ...

  2. Java 14 :NullPointerException的处理新方式

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | liululi 来源 | 公众号「锅外的大佬」 ...

  3. Spring Framework 5.2.5 发布,增加对 Java 14 的支持

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://www.oschina.net ...

  4. JDK/Java 14 正式发布!然而我还在用 Java 8...

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | oschina 来源 | https://ww ...

  5. Java 14 可能带来什么新特性?

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | oschina 来源 | 公众号「开源中国」 JDK/Java 13 在一个月前已 ...

  6. 甲骨文正式发布Java 14(Oracle JDK 14)

    甲骨文两年来,每六个月如约发布新版本的Java,Oracle JDK 14为开发人员带来创新功能和新特性预览.Oracle JDK 14增加了一些新特性来提高开发人员工作效率,这些新特性包括:对swi ...

  7. 甲骨文正式发布Java 14(Oracle JDK 14),下载下来尝尝鲜~~~

    Java一直以来都是深受软件开发者青睐的首选编程语言.伴随着Java 14创新功能的按时交付,对未来的周详规划以及对生态系统的持续投入,Java平台将继续为现代应用开发注入动力. 代码示例: publ ...

  8. 牛X!Eclipse 开始支持 Java 14~

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:十分钟了解 git 那些 "不常用" 命令个人原创+1博客:点击前往,查看更多 作者:way ...

  9. eclipse安装maven插件_牛X!Eclipse 开始支持 Java 14~

    随着JDK 14的发布,各大Java IDE也开始支持JDK 14.最新版本的Eclipse IDE 2020-03也于2020年3月18日发布,本文介绍如何通过Eclipse IDE来开发Java ...

  10. Java 14 发布了,终于可以扔掉Lombok了?

    2020年3月17日发布,Java正式发布了JDK 14 ,目前已经可以开放下载.在JDK 14中,共有16个新特性,本文主要来介绍其中的一个特性:JEP 359: Records 官方吐槽最为致命 ...

最新文章

  1. root密码忘记怎么办
  2. 如何理解Memory leak
  3. vfp全国计算机二级,全国计算机二级VFP试题
  4. JVM调优总结(2):一些概念(下)
  5. html移动滚动彩字字幕特效,如何制作滚动字幕 旋转好莱坞字幕特效效果图(超多滚动效果)...
  6. hapi 获取 请求地址 url
  7. hadoop--集群崩溃处理方法
  8. HDU5765 Bonds 最小割极
  9. Flask详解(上篇)
  10. 美团笔试题——公司食堂
  11. java中常见的数据结构分类
  12. java 网络百度搜索_Java爬虫怎么调用百度搜索引擎,对关键字的网页爬取?
  13. 照片一寸改成二寸,并压缩体积KB的工具
  14. 极大似然函数求解_极大似然估计法的理解指南
  15. ricequant量化交易文件如何保存和读取
  16. halcon 1维测量
  17. Python自学篇——快递分拣程序
  18. miui系统android os,color os对比miui 一加手机刷Color OS与MIUI系统体验对比评测
  19. 产品管理——何为用户体验?附《用户体验的要素》PDF版下载
  20. 诚之和:首个俄罗斯太空电影摄制组准备返回地球

热门文章

  1. BIND9源码分析奠基
  2. [ZT]javascript window resize 窗口改变事件
  3. 优秀文章收集,也有专题,改变了我的一些看法。
  4. 安装配置管理 之 JRE 安装和配置,以适合JAVA程序运行所具备的环境
  5. 小程序对实体行业转型有何影响?
  6. OSChina 周三乱弹 —— 万众期待的拉黑功能
  7. 1996: [Hnoi2010]chorus 合唱队
  8. 1225 八数码难题
  9. wireshark协议
  10. Webservice调用方式:axis,soap详解