??xml version="1.0" encoding="utf-8" standalone="yes"?> 在?Java Collections Framework Ӟ必须知道 W一个方法允许将一个集合的内容复制到另一个集合,如下所C:(x) 该代码将 (zhn)将在控制台中获? 然后要重? M于 0 的数字都意味着“小于”,但是 -1 是表C个意思一个很好用的倹{与此类|?1 表示“大于”也很方ѝ正如?zhn)可以看到的? 则意味着“等于”。以q种方式比较两个对象昄是一个手动过E。?zhn)必须遍历实例变量q比较每个变量。在q种情况下,我们要比较名和姓QƈҎ(gu)姓氏有效地对Zq行排序。但是?zhn)应该能够明白Z么我们的例子q于单。每? 比较对象的其他方法是Q提? 在控制台H口中,应该看到以某U顺序排列的“Al Jones”和“Bob Smith”?/P>
使用W二U方法是有一些好的理q。技术方面的理由已经出?jin)本文的讨论范围。不q,从好?OOD 的角度来看,比较代码隔d另一个对象中Q而不是ؓ(f)每个 何时应该使用Ҏ(gu)cd的集合?q是一个由(zhn)做出的判断军_Q而且Q正是因cȝ军_Q?zhn)希望像一位编Eh员那样付出很多?/P>
管许多专业人士怿Q没有太多关于在Ml定情况下用哪些类的硬性规定。以我的个hl验而论Q大多数旉里,我用集合?CODE>ArrayList ? 集合?Java 语言的最强大的一个方面。不要害怕用集合,但要提防“{向”。例如,以下是一个从 q个代码抛出一?Collections
cM的变量是哪些。这个类包含大量支持集合操作的静(rn)态方法。在q里Q我们不?x)对所有方法进行介l,因ؓ(f)(zhn)可以自己阅?APIQ但是我们将介绍两个l常出现?Java 代码中的Ҏ(gu)Q?
copy()
sort()
List source = new ArrayList();
source.add("one");
source.add("two");
List target = new ArrayList();
target.add("three");
target.add("four");
Collections.copy(target, source);
System.out.println(target);
source
复制?target
中。目标代码的大小必须与源代码的大相同,q样Q就无法?List
复制到空?List
中?/P>
sort()
Ҏ(gu)元素归类成其自然序。所有元素都必须实现 Comparable
接口Q这P它们可?I>怺比较。像 String
q样的内|类也已l创建。因此,对于一l字W串而言Q可以用以下代码按照字兔R序的升序序对字W串q行排序Q?/P>
List strings = new ArrayList();
strings.add("one");
strings.add("two");
strings.add("three");
strings.add("four");
Collections.sort(strings);
System.out.println(strings);
[four, one, three, two]
。但是现在可以对创徏的类q行分类吗?可以?Adult
q行分类。首先要让类q行怺比较Q?/P>
public class Adult extends Person implements Comparable {
...
}
compareTo()
来比较两?Adult
实例。我们将保持我们的例子在比较斚w的简单性,所以该例不?x)进行太多的比较操作Q?/P>
public int compareTo(Object other) {
final int LESS_THAN = -1;
final int EQUAL = 0;
final int GREATER_THAN = 1;
Adult otherAdult = (Adult) other;
if ( this == otherAdult ) return EQUAL;
int comparison = this.firstname.compareTo(otherAdult.firstname);
if (comparison != EQUAL) return comparison;
comparison = this.lastname.compareTo(otherAdult.lastname);
if (comparison != EQUAL) return comparison;
return EQUAL;
}
Adult
都只有一个名和姓。如果想q行深层的比较,那么必须比较每个 Adult
?Wallet
Q以查看它们是否相等Q这可能意味着我们必须?Wallet
和其余对象上实现 compareTo()
。此外,Z(jin)正确q行比较Q无Z旉?compareTo()
Q都必须保该比较与 equals()
是一致的。我们没有实?equals()
Q所以不用担?j)要与它一_(d)但我们可以做到这一炏V事实上Q在q回 EQUAL
之前Q我已经看到包含cM以下代码行的代码Q?/P>
assert this.equals(otherAdult) : "compareTo inconsistent with equals.";
compareTo()
中的法Q将其放?Comparator
cd的对象中Q然后对分cȝ集合调用 Collections.sort()
?Comparator
Q如下所C:(x)
public class AdultComparator implements Comparator {
public int compare(Object object1, Object object2) {
final int LESS_THAN = -1;
final int EQUAL = 0;
final int GREATER_THAN = 1;
if ((object1 == null) ;amp;amp (object2 == null))
return EQUAL;
if (object1 == null)
return LESS_THAN;
if (object2 == null)
return GREATER_THAN;
Adult adult1 = (Adult) object1;
Adult adult2 = (Adult) object2;
if (adult1 == adult2)
return EQUAL;
int comparison = adult1.firstname.compareTo(adult2.firstname);
if (comparison != EQUAL)
return comparison;
comparison = adult1.lastname.compareTo(adult2.lastname);
if (comparison != EQUAL)
return comparison;
return EQUAL;
}
}
public class CommunityApplication {
public static void main(String[] args) {
Adult adult1 = new Adult();
adult1.setFirstname("Bob");
adult1.setLastname("Smith");
Adult adult2 = new Adult();
adult2.setFirstname("Al");
adult2.setLastname("Jones");
List adults = new ArrayList();
adults.add(adult1);
adults.add(adult2);
Collections.sort(adults, new AdultComparator());
System.out.println(adults);
}
}
Adult
提供自w与其他对象比较的能力是一个好L。然而,因ؓ(f)q正?equals()
要做的事Q所以即使结果是布尔|对于每种Ҏ(gu)而言Q那些仍然是一些好参数?/P>
使用集合
HashMap
Q请CQ?CODE>Map 不是真正的集合)(j)获得?jin)成功。?zhn)自己M验可能也?x)有同样的效果。以下是一些经验法则,其中的一些显然要好于另外一些:(x)
List
开始,然后让代码告诉?zhn)是否需要另一U类型的集合?
Set
?
Tree...
风格的集合?
Vector
Q除非需要利用其同步功能?
Array
转换?ArrayList
的一个便利方法:(x)
Adult adult1 = new Adult();
Adult adult2 = new Adult();
Adult adult3 = new Adult();
List immutableList = Arrays.asList(new Object[] { adult1, adult2, adult3 });
theList.add(new Adult());
UnsupportedOperationException
Q因为由 Arrays.asList()
q回?List
是不可变的。而?zhn)又无法将新的元素dC可变?List
中,所以必ȝ?j)一炏V?/STRONG>
[http://www.javaalmanac.com] - Java开发者年鉴一书的在线版本. 要想快速查到某UJava技巧的用法?qing)示例代? q是一个不错的d.
[http://www.onjava.com] - O'Reilly的Java|站. 每周都有新文?
[http://java.sun.com] - 官方的Java开发者网?nbsp;- 每周都有新文章发?
[http://www.developer.com/java] - 由Gamelan.com l护的Java技术文章网?
[http://www.java.net] - Sun公司l护的一个JavaC|站.
[http://www.builder.com] - Cnet的Builder.com|站 - 所有的技术文? 以JavaZ.
[http://www.ibm.com/developerworks/java] - IBM的Developerworks技术网? q是其中的Java技术主?
[http://www.javaworld.com] - 最早的一个Java站点. 每周更新Java技术文?
[http://www.devx.com/java] - DevXl护的一个Java技术文章网?
[http://www.fawcette.com/javapro] - JavaPro在线杂志|站.
[http://www.sys-con.com/java] - Java Developers Journal的在U杂志网?
[http://www.javadesktop.org] - 位于Java.net的一个Java桌面技术社区网?
[http://www.theserverside.com] - q是一个讨论所有Java服务器端技术的|站.
[http://www.jars.com] - 提供Java评论服务. 包括各种framework和应用程?
[http://www.jguru.com] - 一个非常棒的采用Q&A形式的Java技术资源社?
[http://www.javaranch.com] - 一个论坛,得到Java问题{案的地方,初学者的好去处?nbsp;
[http://www.ibiblio.org/javafaq/javafaq.html] - comp.lang.java的FAQ站点 - 攉?jin)来自comp.lang.java新闻l的问题和答案的分类目录.
[http://java.sun.com/docs/books/tutorial/] - 来自SUN公司的官方Java指南 - 对于?jin)解几乎所有的java技术特性非常有帮助.
[http://www.javablogs.com] - 互联|上最z跃的一个Java Blog|站.
[http://java.about.com/] - 来自About.com的Java新闻和技术文章网?
Java开发者必ȝ中文技术网??
1.http://www.javaresearch.org
2.http://www.chinajavaworld.com
3.http://www.javafan.net
4.http://www.csdn.net/ or http://kb.csdn.net/
5.http://www.cn-java.com/
6.http://www.java-cn.com/index.html
7.http://gceclub.sun.com.cn/
8.http://www.zahui.com/html/6/
9.http://www.matrix.org.cn/
10.http://www.javajia.com/
11.http://www.kissjava.com/
12.http://www.huihoo.com/
(tng) (tng) (tng) Test test[]=new Test[10];
(tng) (tng) (tng) for( int i=0;i
(tng) (tng) (tng) }
import java.io.*;
public class execOP {
public execOP(){
//TODO
}
/**
* 埯外部的程?參數為數i?.q回E序的?不具有入的功能)
* @param appParam E序?qing)參數組成的數?每個參數為一個數i成?
* @return
* @throws Exception
*/
public String execExternalApp(String []appParam) throws Exception{
String str="";
Process proc=Runtime.getRuntime().exec(appParam);
DataInputStream in = new DataInputStream(proc.getInputStream());
DataInputStream error = new DataInputStream(proc.getErrorStream());
try
{
String tmp="";
while ((tmp= in.readLine()) != null) {
str+="控制台?"+tmp+"\n";
//System.out.println("控制??"+tmp);
}
while ((tmp= error.readLine()) != null) {
str+="錯誤輸出:"+tmp+"\n";
//System.out.println("????"+tmp);
}
}
catch(Exception e)
{
System.out.println("獲取應用E序輸出時發生IO錯誤"+e.getMessage());
}
return str;
}
/**
* 埯外部的程?參數為字W串).q回E序的?不具有入的功能)
* @param appParam E序?qing)參數組成的數?每個參數為一個數i成?
* @return
* @throws Exception
*/
public String execExternalApp(String appParam) throws Exception{
String str="";
Process proc = Runtime.getRuntime().exec(appParam);
DataInputStream in = new DataInputStream(proc.getInputStream());
DataInputStream error = new DataInputStream(proc.getErrorStream());
try{
String tmp="";
while ((tmp= in.readLine()) != null) {
str+="I隻台?"+tmp+"\n";
//System.out.println("控制??"+tmp);
}
while ((tmp= error.readLine()) != null) {
str+="錯誤輸出:"+tmp+"\n";
//System.out.println("????"+tmp);
}
}
catch(Exception e){
System.out.println("獲取應用E序輸出時發生IO錯誤:"+e.getMessage());
}
return str;
}
/**
* 測試E序
* @param args
*/
public static void main(String[] args) {
execOP exec=new execOP();
String appcmd="\\\\IP\\c$\\Program Files\\WIPTracking\\XraySystem.exe";
//String appcmd=args[0];
try{
System.out.println(exec.execExternalApp(appcmd));
}
catch(Exception e){
}
}
}