Java Collection 知识体系的建立

 (注明一下,我所说的 Container    不是 java.awt.Container , 而是数据对象的容器 Container

对于  Java 中Collection 与 Map 中一直很困惑,这是从学习Java 以来就有的,现在总算理清了。

 

困惑

 学的时候Collection 与 Map 是一起讲的,但是在学习的时候又感觉它们是两部分内容。

这张图我相信很多人都见过。


但我一直认为少了些什么。


一找 Java 容器图,又找到这张图:


留我在风中凌乱。。。


答案

直到我想起了这么一句话:Java不适合于作为主要编程教学语言。我才反应过来,我思考的方向有问题。因为 Java 是一门商业化的并运用于实际的语言。它是基于工程的。所以,如果从工程方面来看的话,Java 不是一个整体,因为我是基于完全抽象的理论的学习方式去看 Java ,而理论应当是完备而清晰的。这和教学时候马士兵老师把Java从工程方面来讲,当然对接不上。

问题的源头想清楚了,那么答案就很简单了。

这是纯理论上Java Container 的样子: 



这也是我们所希望看到的样子。可惜,理论与实际是两回事。Java 实际实现中并没有 将数据对象 Container 单独罗列出来,做成一个 Java. Container 。Map / Collection 在java.util 下,而 Array 在 java.lang.Object 下。

这才是 Java 实际实现的 Container :


简化一下,就成了这样:


之所以实际实现的时候这么复杂,我想这正是因为 Java 是一个不断迭代的语言吧。毕竟 Java 是面向应用的, 实际需要的先做出来,把问题解决了先。解决完问题,一抽象解决问题过程中的知识,发现更多知识。但是当把这些拓展知识整理实现后又只能强行黏在原来的工程之上。因为你总不可能看原来的台子搭得不好就拆了重搭吧。这台子上的人怎么办,就算没人,谁能保证这个台子就一定是最好的,不需要再拆?所以我想来,也就只有在一开始的时候好歹留些余地给将来需要拓展的时候。这才是实际。

体会编程思想是真的重要。

总结

那我再以依次推进的方式,总结下:

1.   纯抽象的Container 应当是这样:


2.   只求运用 Java 来解决问题,不想深入了解实际 Java 中Container 的底层实现,可以把Container 理解成这样:


3.   而 Java 中Container 的底层结构是这样的:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值