delphi转java_从DELPHI到JAVA转换

这篇博客详细对比了DELPHI和JAVA在字符串处理、数组、集合、Key/Value对、多线程同步、文件操作、目录操作、压缩、RTTI以及跳出嵌套循环等方面的差异。JAVA在字符串处理中使用StringBuffer优化性能,数组不可变,集合如HashSet和TreeSet各有特点,多线程同步有多种方式,文件和目录操作类功能丰富。
摘要由CSDN通过智能技术生成

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

(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

注意:当取得一个迭代器后,如果容器被改变,会抛出异常。

3.集合

DELPHI

var option : set of char;

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

JAVA

(1)

BitSet

大小不限制。

性能相比array略差。

(2)

HashSet (TreeSet)

元素必须唯一。

每个元素都必须定义equals函数和compareTo函数。

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

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

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

4.Key/Value对

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

(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等。

8.压缩

DELPHI

zlib.pas

JAVA

ZipInputStream / ZipOutputStream

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,循环中止执行

}

11.其他常用函数:

函数功能

DELPHI

JAVA

输出调试信息

writeln

System.out.println()

随机函数

random

Math.random()

字符串转换为整数

StrToInt

Integer.parseInt()

字符串转换为浮点数

StrToFloat

Double.parseDouble()

计时

Now

System. currentTimeMillis()

多线程同步

synchronized

synchronized

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值