从DELPHI到JAVA[delphi]

1 字符串处理

       DELPHI

              var s :string;

              s := s + ‘a string‘;

       JAVA             习惯用法

              String s = new String();

              s += ‘a string‘;

              由于String对象不可修改,导致对String对象赋值会有一个StringBuffer对象产生并销毁,一个新的String对象被产生。在大字符串处理和循环处理时,性能极差。(参见《JAVA 字符串处理速度测试》)

       JAVA             优化用法

              StringBuffer s = new StringBuffer();       //如果字符串较大,最好能够赋予一个初始的StringBuffer大小。

              s.Append(‘a string‘);

2 数组

       DELPHI

              var a:array of string;

              SetLength(10);

       JAVA             1: Arrays

              String[] a = new String[10];

              int [] a = {1,2,3,4}

              可以直接赋初始值(不管是基本类型还是对象)

              注意:不可改变数组大小!

              拥有以下实用函数:full,sort,equals,binarySearch,System.arraycopy

       JAVA             2: ArrayList (LinkedList)

              ArrayList a = new ArrayList();

              a.add(new Integer(1));

              a.get(1);

              注意:数组的值必须是对象类型!

              不能用“[]”取值。

              容器的元素是Object类。(也即使用时需要强制转型)【JDK1.5支持泛型JAVA】

              ArrayList随机访问性能好,但元素插入和删除性能差。LinkedList反之。

              LinkedListList中央插入和删除元素性能好,可以用来制作stack,queue或deque。包含下列函数:addFirst,addLast,getFirst,getLast,removeFirst,removeLast

              要访问一个容器,最好是使用迭代器,例如a.iterator()。

              迭代器使用:

              void print(Iterator e) { while (e.hasNext) System.out.println(e.next());}

              迭代器包含下列函数:next,hasNext,remove

              注意:当取得一个迭代器后,如果容器被改变,会抛出异常, delphi override 和 overload 的区别

 

3 集合

       DELPHI

              var option : set of char;

              option := [‘a‘,‘b‘];

       JAVA             1 BitSet

              大小不限制。

              性能相比array略差。

       JAVA             2 HashSet (TreeSet)

              元素必须唯一。

              每个元素都必须定义equals函数和compareTo函数,delphi pchar string互转函数

              HashSet查找性能好,但无法排序。必须定义hashCode函数。

              TreeSet是有序的,但查找性能较差。

              TreeSet可以产生大小在一定范围内的一批元素。

              Collection函数说明(包含Set和Map):

函数名称

函数说明

备注

add

将对象增加到容器

可能未被实现

addAll

将一批对象增加到容器

可能未被实现

clear

清除所有元素

可能未被实现

contains

检查是否存在元素

 <o:p></o:p>

containsAll

检查是否存在一批元素

 <o:p></o:p>

isEmpty

容器是否为空

 <o:p></o:p>

iterator

返回一个迭代器

 <o:p></o:p>

remove

删除一个元素

可能未被实现

removeAll

删除一批元素

可能未被实现

retainAll

删除除了一批元素外的所有元素

可能未被实现

size

容器中元素个数

 <o:p></o:p>

toArray

返回一个含所有元素的array

 <o:p></o:p>

max,min

取得最大、最小值

 <o:p></o:p>

copy

从一个容器复制到另一个容器

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

             

4 Key/Vaue对

       DELPHI

              var sl :TStringList;

              sl.Values[‘key‘] := ‘value‘;

       JAVA             HashMap (TreeMap,WeakHaspMap)

              TreeMap可排序,但性能较差。可以返回在一定大小范围内元素的子集。

              HashMap性能好,不可排序。需要提供hashCode、equals等函数。

              WeakHaspMap似乎可以节省内存空间。

5 多线程同步

       JAVA

              Collection c = Coolections. synchronizedCollection(new ArrayList());

              List l = Coolections. synchronizedList(new ArrayList());

              Set s = Coolections. synchronizedSet(new HashSet());

              Map c = Coolections. synchronizedMap(new HashMap());

6 文件操作

       DELPHI

              var fin :TFileStream;

       JAVA             1 InputStream / OutputStream

      

       JAVA             2 RandomAccessFile

      

7 目录操作

       DELPHI

              FindFirst,etc.

       JAVA             File

              String[] list = path.list( new FilenameFilter() {

                     public boolean accept(File dir, String s) {

                            String f = new File(s).getName();

                            return f.indexOf(filter)!=-1;

                     }       //这儿是一个内嵌类(inner class)

              });

              File类提供下列函数:getAbsolutePath, getName, getPath, length, lastModified, renameTo, mkdirs, isFile, isDirectory, exists,delete等。

 <o:p></o:p>

8 压缩

       DELPHI

              zlib.pas

       JAVA             ZipInputStream / ZipOutputStream

 <o:p></o:p>

9 RTTI

       DELPHI

              is, as ,className,typInfo.pas

       JAVA

              instanceof或isInstance()相当于DELPHI中的is

              Class.forName("AClass") 相当于 AClass.class

              对于外覆类例如Integer,其Integer.TYPE 等同于 integer.class

              Class.forName("AClass").newInstance()可以产生一个新对象(该类必须具有缺省构造函数)。

              java.lang.reflect提供Field, Method. Constructor等类。

             

10 跳出嵌套循环

       DELPHI

              goto

       JAVA

              label1:

              for (int i=0; i<10; i++)

              for (int j=0; j<10; j++)

              {

                     continue label1;    //跳转到label1,循环继续执行

                     break label1;           //跳转到label1,循环中止执行

              }<o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

测试:

       建议在编写程序时同时编写测试代码。

 <o:p></o:p>

其他常用函数:

函数功能

DELPHI

JAVA

输出调试信息

writeln

System.out.println()

随机函数

random

Math.random()

字符串转换为整数

 

 

原文来自: 【100脚本网 www.pc100.net】

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。