当前位置:首页 > 开发 > 编程语言 > Java > 正文

JAVA的困难分析

发表于: 2013-11-19   作者:datamachine   来源:转载   浏览:
摘要: 前段时间转了一篇SQL的文章(http://datamachine.iteye.com/blog/1971896),文章不复杂,但思想深刻,就顺便思考了一下java的不足,当砖头丢出来,希望引点和田玉。   -----------------------------------------------------------------------------------------

前段时间转了一篇SQL的文章(http://datamachine.iteye.com/blog/1971896),文章不复杂,但思想深刻,就顺便思考了一下java的不足,当砖头丢出来,希望引点和田玉。

 

-----------------------------------------------------------------------------------------分割线----------------------------------

SQL和JAVA(这里的JAVA泛指各种高级语言)是最常用的两种计算体系。两者在处理批量结构化数据(即数据库中的数据)时各有优势,JAVA更灵活,SQL更便利。两者虽有相当程度的互补,但在实际应用中很难调和。本文主要讨论java的问题,讨论思路沿袭SQL的那篇文章。

 

JAVA以及其它高级语言看起来没有SQL的计算不分步、集合无序、集合化不彻底和缺乏对象引用等问题,其执行过程符合人们的思维习惯,用JAVA时不必象使用SQL那样需要绕道变换思路。

那么,JAVA是否能够轻松完成批量数据计算呢?

在许多场合程序员确实会放弃使用SQL而采用JAVA。但是,由于JAVA不具备SQL的三个重要特点,数据计算依然繁琐困难。

 

首先,JAVA缺乏针对批量数据计算的基础支持,这一点很容易理解。

虽然JAVA提供了集合数据类型(即数组),但JDK中并没有多少相关的基本计算。简单的求和运算也需要写一段循环代码,虽然难度不大,但处处都这么写就繁琐了。另外,JAVA没有提供针对记录集合(即对象数组)的过滤、分组、连接等计算,代码实现难度不低,这就不仅只是繁琐而是困难了。

 

那么,是不是为JAVA搞一套批量数据计算的基础类库就可以了呢?JAVA的语法规则不支持表达式参数,开发批量数据计算类库的努力注定无法完美实现。

 

举例说明:有集合(数组)x,我们想提供一些针对其成员的基础计算,比如求和,那么在类库中写个x.sum()函数就可以;还想计算平方和呢,再写一个x.sum2()函数;还有数学平均、绝对值的合计、个位数的合计、…,没完没了,类库很快就会庞大到无法容忍的地步。

 

SQL没有这个苦恼,求和,可以写sum(x);平方和,可以写sum(x*x);绝对值合计,可以写sum(abs(x));…

JAVA的语法却不能写这种东西,编译器会将sum(x*x)中的x*x先算出来,它不支持把表达式作为参数传递进函数内部再计算的机制。但记录集合上的运算对表达式参数的需求强烈,过滤、分组、排序、连接等都必须使用表达式(不使用表达式参数难以描述这些运算)。

 

一个替代方案是将表达式都写进字符串,这样sum(x*x)要被写成sum("x*x")。这个办法在理论上可行,但会导致书写和阅读的巨大麻烦。试想,如果SQL要求我们把语句写成这样会造成什么样的烦恼:

select "x*x" from "A" where "x>5"?而且,又怎么区分我们想要的是表达式x*x,还是常数字符串"x*x"呢?

 

第三,所谓的批量数据大都是结构化数据,JAVA提供了强大的类概念,可以自由地定义数据结构。但是,程序中用到的数据结构必须在编译前设计好,不能由某个语句临时产生,即不支持动态数据结构。而实际运算过程中的动态数据结构要求比比皆是。我们经常需要新的数据结构来描述返回的结果集,有时还需要在现有数据结构上添加计算字段以方便计算,没有动态数据结构的支持,所谓的批量结构化数据运算就成了空话。

但是,SQL能够很好地满足这一要求,select语句会自然地创建新数据结构,几乎所有数据库都支持用语句动态创建/修改表和临时表。

 

如果我们把SQLJAVA的优点都保留,发明一种即支持基础批量数据计算类库、表达式参数机制和动态数据结构,又支持计算分步、一致的有序集合对象、对象引用机制等运算机制的程序语言,是否就能很好地解决数据计算的困难了?

JAVA的困难分析

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
一个朋友的SharePoint 2007环境, 存在相同页面打开时快时慢的现象. 经过一番排查, 有如下的现象: 1.
Eclipse下的Java反编译插件:Eclipse Class Decompiler,整合了目前最好的2个Java反编译工具Jad和JD
Eclipse下的Java反编译插件:Eclipse Class Decompiler,整合了目前最好的2个Java反编译工具Jad和JD
Eclipse下的Java反编译插件 查看源代码不再困难 Eclipse下的Java反编译插件:Eclipse Class Decompi
1、 首先要去官方下载json-lib工具包 下载地址: http://sourceforge.net/projects/json-lib/files/
1、 首先要去官方下载json-lib工具包 下载地址: http://sourceforge.net/projects/json-lib/files/
一个项目从搭建开始,开发的初期往往思路比较清晰,代码也比较清晰。随着时间的推移,业务越来越复
JConsole(或者Java平台最新版本,VisualVM)是一个内置分析器,它同Java编译器一样容易启动。如果
一个项目从搭建开始,开发的初期往往思路比较清晰,代码也比较清晰。随着时间的推移,业务越来越复
译者 chunfengqiushui Dyslexia independent of IQ 读写困难无关于智商 2011年9月23日 将近5—10%的
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号