Thinking in Java 14.3.3递归计数
参数是需要统计的顶级类,及类的集合
通过键值对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递归计数相关推荐
- mysql vue 菜谱_vue+ java 实现多级菜单递归效果
效果如图: 大概思路:树形视图使用的是vue官方事例代码,java负责封装数据,按照vue官方事例的数据结构封装数据即可.有两个需要关注的点: 1.官方事例的数据结构是一个对象里面包含着集合,而不是一 ...
- Java 14 :NullPointerException的处理新方式
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | liululi 来源 | 公众号「锅外的大佬」 ...
- Spring Framework 5.2.5 发布,增加对 Java 14 的支持
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://www.oschina.net ...
- JDK/Java 14 正式发布!然而我还在用 Java 8...
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | oschina 来源 | https://ww ...
- Java 14 可能带来什么新特性?
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | oschina 来源 | 公众号「开源中国」 JDK/Java 13 在一个月前已 ...
- 甲骨文正式发布Java 14(Oracle JDK 14)
甲骨文两年来,每六个月如约发布新版本的Java,Oracle JDK 14为开发人员带来创新功能和新特性预览.Oracle JDK 14增加了一些新特性来提高开发人员工作效率,这些新特性包括:对swi ...
- 甲骨文正式发布Java 14(Oracle JDK 14),下载下来尝尝鲜~~~
Java一直以来都是深受软件开发者青睐的首选编程语言.伴随着Java 14创新功能的按时交付,对未来的周详规划以及对生态系统的持续投入,Java平台将继续为现代应用开发注入动力. 代码示例: publ ...
- 牛X!Eclipse 开始支持 Java 14~
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:十分钟了解 git 那些 "不常用" 命令个人原创+1博客:点击前往,查看更多 作者:way ...
- eclipse安装maven插件_牛X!Eclipse 开始支持 Java 14~
随着JDK 14的发布,各大Java IDE也开始支持JDK 14.最新版本的Eclipse IDE 2020-03也于2020年3月18日发布,本文介绍如何通过Eclipse IDE来开发Java ...
- Java 14 发布了,终于可以扔掉Lombok了?
2020年3月17日发布,Java正式发布了JDK 14 ,目前已经可以开放下载.在JDK 14中,共有16个新特性,本文主要来介绍其中的一个特性:JEP 359: Records 官方吐槽最为致命 ...
最新文章
- root密码忘记怎么办
- 如何理解Memory leak
- vfp全国计算机二级,全国计算机二级VFP试题
- JVM调优总结(2):一些概念(下)
- html移动滚动彩字字幕特效,如何制作滚动字幕 旋转好莱坞字幕特效效果图(超多滚动效果)...
- hapi 获取 请求地址 url
- hadoop--集群崩溃处理方法
- HDU5765 Bonds 最小割极
- Flask详解(上篇)
- 美团笔试题——公司食堂
- java中常见的数据结构分类
- java 网络百度搜索_Java爬虫怎么调用百度搜索引擎,对关键字的网页爬取?
- 照片一寸改成二寸,并压缩体积KB的工具
- 极大似然函数求解_极大似然估计法的理解指南
- ricequant量化交易文件如何保存和读取
- halcon 1维测量
- Python自学篇——快递分拣程序
- miui系统android os,color os对比miui 一加手机刷Color OS与MIUI系统体验对比评测
- 产品管理——何为用户体验?附《用户体验的要素》PDF版下载
- 诚之和:首个俄罗斯太空电影摄制组准备返回地球