|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
没有那个大公司会傻了吧唧用.net开发大型项目,开发了,那等于自己一半的生命线被微软握着呢。而.net不行,限制在window系统,又是捆绑,鄙视微软之!
定制和扩大JavaCollections
关于良多Java开辟职员来讲,JavaCollectionsAPI是尺度Java数组及其一切弱点的一个十分必要的替换品。将Collections主要与ArrayList接洽到一同自己没有错,可是关于那些有探究精力的人来讲,这只是Collections的冰山一角。
固然Map(和它的经常使用完成HashMap)十分合适名-值对或键-值对,可是没有来由让本人范围于这些熟习的工具。可使用得当的API,乃至得当的Collection来修改良多易错的代码。
本文是5件事系列中的第二篇文章,也是专门会商Collections的7篇文章中的第一篇文章,之以是花这么年夜的篇幅会商Collections,是由于这些汇合在Java编程中是云云主要。起首我将会商做每件事的最快(但大概不是最多见)的体例,比方将Array中的内容转移到List。然后我们深切切磋一些较少人晓得的工具,比方编写定制的Collections类和扩大JavaCollectionsAPI。
1.Collections比数组好
刚打仗Java手艺的开辟职员大概不晓得,Java言语最后包含数组,是为了应对上世纪90年月早期C++开辟职员关于功能方面的批评。从当时到如今,我们已走过一段很长的路,现在,与JavaCollections库比拟,数组不再有功能上风。
比方,若要将数组的内容转储到一个字符串,必要迭代全部数组,然后将内容毗连成一个String;而Collections的完成都有一个可用的toString()完成。
除多数情形外,好的做法是尽快将碰到的任何数组转换成汇合。因而成绩来了,完成这类转换的最简单的体例是甚么?现实证实,JavaCollectionsAPI使这类转换变得简单,如清单1所示:
清单1.ArrayToList
import java.util.*;
public class ArrayToList
{
public static void main(String[] args)
{
// This gives us nothing good
System.out.println(args);
// Convert args to a List of String
List<String> argList = Arrays.asList(args);
// Print them out
System.out.println(argList);
}
}
注重,前往的List是不成修正的,以是假如实验向个中增加新元素将抛出一个UnsupportedOperationException。
并且,因为Arrays.asList()利用varargs参数暗示增加到List的元素,以是还可使用它轻松地用以new新建的对象创立List。
2.迭代的效力较低
将一个汇合(出格是由数组转化而成的汇合)的内容转移到另外一个汇合,大概从一个较年夜对象汇合中移除一个较小对象汇合,这些事变其实不鲜见。
您大概很想对汇合举行迭代,然后增加元素或移除找到的元素,可是不要如许做。
在此情形下,迭代有很年夜的弱点:
每次增加或移除元素后从头调剂汇合将十分低效。
每次在猎取锁、实行操纵和开释锁的过程当中,都存在潜伏的并发窘境。
当增加或移除元素时,存取汇合的其他线程会引发合作前提。
能够经由过程利用addAll或removeAll,传进包括要对其增加或移除元素的汇合作为参数,来制止一切这些成绩。
<p>
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。 |
|