你没见过的Java入门,使用中文例程的教程之十:更多结构

数组已经可以做很多事了, 但它的局限在于长度是不可变的. 上一讲的一队里只能”换人”,不能加进第五个人了, 而且,即使把位子空出来,”队伍”的长度也还是四.

当然有变通的办法, 比如: 上来就建个够大的,在90%的问题里,可能一百万就够大了,反正内存现在都是几个G的. 或者灵活点, 满了的时候就新建一个更大的数组, 把原本的数据”挪”到新数组里. 很显然, 这两种做法都有前人实践了. 后者明显是更普遍适用的, 于是这套做法在Java 1.2版里(现在有1.9了)就催生了标准库的java.util.ArrayList类.

注: 知道这个由来不是因为我是考古专业,也不是信口胡诌. 记得之前说过JDK是开源的吗? Java标准库当然也是JDK的一部分, 有兴趣的可以看看ArrayList.add方法的实现.

“排队买票.java”演示了它的基本操作:

另一种数据存取方式是根据一类数据,查找另一类数据. 比如说, 九九乘法表, 就是从两个数找对应的结果. 四六二十四可以表示成”46″->24, 二八十六:”28″->16

这种从一种值查询另一种值的情况, 可以考虑哈希表. 示例在”小九九.java”:

当然根据思路不同, 一个问题可以用各种不同的结构解决, 比如乘法表用方阵(数组)也合适.

算法和数据结构是程序员面试很喜欢的问题, 因为它很接近数学和建模. 不过实际工作中, 真正需要实现新算法或者改进现有算法的编程工作比例很有限. 即使厌恶数学, 编程也可以做很多很多不需要小学以上数学知识和方法的事情. 当然, 难免有一天会有书到用时方恨少的感觉.

用画画作比方, 二岁的小孩也可以, 毕其一生追求极致也有.

THE END
喜欢就支持以下吧