我们不在使用前面那种笨拙的方式,n个instanceof来判断了
/** * 书本:《Thinking In Java》 * 功能:为了对pet进行计数,我们做一个能跟踪各种不同类型的Pet的数量的工具,用map。这里使用动态instanceof() * 文件:PetCount3.java * 时间:2015年4月14日09:25:29 * 作者:cutter_point */ package Lesson14TypeInformation; import java.util.LinkedHashMap; import java.util.Map; import net.mindview.util.MapData; import static net.mindview.util.Print.*; import Lesson14TypeInformation.pets.LiteralPetCreator; import Lesson14TypeInformation.pets.Pet; import Lesson14TypeInformation.pets.Pets; public class PetCount3 { static class PetCounter extends LinkedHashMap<Class<? extends Pet>, Integer> { //构造函数 public PetCounter() { super(MapData.map(LiteralPetCreator.allTypes, 0)); //初始化所有的类别的个数为0 } public void count(Pet pet) //吧这个pet对象添加到map里面 { for(Map.Entry<Class<? extends Pet>, Integer> pair : this.entrySet()) { if(pair.getKey().isInstance(pet)) //找到了和pet匹配的对像,那么就添加一个 { this.put(pair.getKey(), pair.getValue() + 1); } } } public String toString() { StringBuilder result = new StringBuilder("{ "); for(Map.Entry<Class<? extends Pet>, Integer> pair : this.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(); } } public static void main(String[] args) { PetCounter petCount = new PetCounter(); for(Pet pet : Pets.createArray(20)) { printnb(pet.getClass().getSimpleName() + " "); petCount.count(pet); //吧这个pet加入进去 } print(); print(petCount); //输出所有的个数 } }
好的,这样做似乎是真把把代码简单化了,单如果我们仔细看看的话,其实这代码写的并不完美,相对第一种来说,这种的时间复杂度会很高,当不是20个的数量级而是200000000000000000的时候,这个代码估计就不好玩了,好啦,不废话了
输出:
Rat -obj2 Manx -obj2 Cymric -obj2 Mutt -obj2 Pug -obj2 Cymric -obj2 Pug -obj2 Manx -obj2 Cymric -obj2 Rat -obj2 EgyptianMau -obj2 Hamster -obj2 EgyptianMau -obj2 Mutt -obj2 Mutt -obj2 Cymric -obj2 Mouse -obj2 Pug -obj2 Mouse -obj2 Cymric -obj2
{ Pet = 20, Dog = 6, Cat = 9, Rodent = 5, Mutt = 3, Pug = 3, EgyptianMau = 2, Manx = 7, Cymric = 5, Rat = 2, Mouse = 2, Hamster = 1 } obj1
时间: 2024-10-06 03:22:57