杂记-java集合之collection结构
这里简单说明一下Collection的体系结构
以ArrayList为例,他实现了List接口,继承了AbstractList抽象类,而AbstractList实现了AbstractCollection抽象类,AbstractCollection与List是一个级别,他们的上一级都是Collection,既然ArrayList继承了AbstactList,而AbstactList的祖父类AbstractCollection和List一样的级别,为什么还要单独再实现List的接口呢?首先ArrayList用到了一个模板设计模式,他继承自AbstracrtList已经提供了ArrayList所需要的大部分模板代码,但是作为子类并不满足仅仅实现这些功能,他还想实现别的一些子类的功能,而这些功能都继承自List,这就跟武术一样,李小龙的截拳道最初来自中国的一些功夫像咏春拳,太极,到了国外发现这个日本跆拳道,柔道,空手道很不错,借鉴融合,后来发现泰国的泰拳不错,拿来融合,其实这些种种武术传承都有一个共同的特点-就是格斗技巧,用这个来类比想必会好理解。另外中国武术是一个派系,日本跆拳道,美国的拳击,泰国的泰拳都是自己的派系,但是这些派系下又有自己的不同,像太极拳有陈式、杨式、武式、吴式、孙式、和式等派系,从这里我们可以管中窥豹,其实java的发展历程遵循着这个规律,不断发展不断完善,从自身来说也是这个道理,不断学习不断丰富,总有一天我们也会成为像java这样饱有内涵而丰富!
Collection接口中的方法如图,划线的四个方法是java1.8新增的在接口中方法的实现,修饰关键字是default,为什么要在接口中有实现方法呢?
便于扩展接口中的方法而不破坏原有的继承体系,比如我要给所有的子类都加入一个叫做strean()的方法,用原来的办法就是在每个子类中都自己写,而在Collection中声明并实现就节省了大量的工作,这样的写法也符合java中的开闭原则——对修改关闭,对扩展开放。