网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.J2SE综合:对java.util的总结 八.
.父类和子类转换(子类对象赋值给父.
.Sun.XVR-1200图形加速器的使用.
.如何使用Java网络启动部署软件.
.设计模式中文版.
.JAVA评述.
.Java的秘密:将应用程序的设定存.
.Hibernate获得成功的十大理由.
.instanceof 运算符.
.Struts 和 Tiles 辅助基于组件的.
.Java咖啡馆(9)——一个压缩归档实.
.XML和J2EE的组合技术.
.初探Java类加载机制的奥秘.
.UploadBean源代码.
.成员函数的说明和使用.
.表现层框架Struts/Tapestry/JSF比.
.桌面系统的第二次战役 -- 难解难.
.实用工具类库java.util.
.Java曝漏洞 应立即打补丁防被黑客.
.Mini Java编译器(三)——属性翻.

Java实用工具

发表日期:2008-1-5



  Collections类中含有其他大量有用的实用工具:
  
Java实用工具


  enumeration(Collection) 为自变量产生原始风格的Enumeration(枚举)
  max(Collection),min(Collection) 在自变量中用集合内对象的自然比较方法产生最大或最小元素
  max(Collection,Comparator),min(Collection,Comparator) 在集合内用比较器产生最大或最小元素
  nCopies(int n, Object o) 返回长度为n的一个不可变列表,它的所有句柄均指向o
  subList(List,int min,int max) 返回由指定参数列表后推得到的一个新列表。可将这个列表想象成一个“窗口”,它自索引为min的地方开始,正好结束于max的前面
  
  注重min()和max()都是随同Collection对象工作的,而非随同List,所以不必担心Collection是否需要排序(就象早先指出的那样,在执行一次binarySearch()——即二进制搜索——之前,必须对一个List或者一个数组执行sort())。
  
  1. 使Collection或Map不可修改
  
  通常,创建Collection或Map的一个“只读”版本显得更有利一些。Collections类答应我们达到这个目标,方法是将原始容器传递进入一个方法,并令其传回一个只读版本。这个方法共有四种变化形式,分别用于Collection(假如不想把集合当作一种更非凡的类型对待)、List、Set以及Map。下面这个例子演示了为它们分别构建只读版本的正确方法:
  
  //: ReadOnly.Java
  // Using the Collections.unmodifiable methods
  package c08.newcollections;
  import java.util.*;
  
  public class ReadOnly {
   public static void main(String[] args) {
  Collection c = new ArrayList();
  Collection1.fill(c); // Insert useful data
  c = Collections.unmodifiableCollection(c);
  Collection1.print(c); // Reading is OK
  //! c.add("one"); // Can't change it
  
  List a = new ArrayList();
  Collection1.fill(a);
  a = Collections.unmodifiableList(a);
  ListIterator lit = a.listIterator();
  System.out.println(lit.next()); // Reading OK
  //! lit.add("one"); // Can't change it
  
  Set s = new HashSet();
  Collection1.fill(s);
  s = Collections.unmodifiableSet(s);
  Collection1.print(s); // Reading OK
  //! s.add("one"); // Can't change it
  
  Map m = new HashMap();
  Map1.fill(m, Map1.testData1);
  m = Collections.unmodifiableMap(m);
  Map1.print(m); // Reading OK
  //! m.put("Ralph", "Howdy!");
   }
  } ///:~
  
  对于每种情况,在将其正式变为只读以前,都必须用有有效的数据填充容器。一旦载入成功,最佳的做法就是用“不可修改”调用产生的句柄替换现有的句柄。这样做可有效避免将其变成不可修改后不慎改变其中的内容。在另一方面,该工具也答应我们在一个类中将能够修改的容器保持为private状态,并可从一个方法调用中返回指向那个容器的一个只读句柄。这样一来,虽然我们可在类里修改它,但其他任何人都只能读。
  为特定类型调用“不可修改”的方法不会造成编译期间的检查,但一旦发生任何变化,对修改特定容器的方法的调用便会产生一个UnsupportedOperationException违例。
  
  2. Collection或Map的同步
  
  synchronized要害字是“多线程”机制一个非常重要的部分。我们到第14章才会对这一机制作深入的探讨。在这儿,大家只需注重到Collections类提供了对整个容器进行自动同步的一种途径。它的语法与“不可修改”的方法是类似的:
  
  //: Synchronization.java
  // Using the Collections.synchronized methods
  package c08.newcollections;
  import java.util.*;
  
  public class Synchronization {
   public static void main(String[] args) {
  Collection c =
   Collections.synchronizedCollection(
    new ArrayList());
  List list = Collections.synchronizedList(
   new ArrayList());
  Set s = Collections.synchronizedSet(
   new HashSet());
  Map m = Collections.synchronizedMap(
   new HashMap());
   }
  } ///:~
  
  在这种情况下,我们通过适当的“同步”方法直接传递新容器;这样做可避免不慎暴露出未同步的版本。
  新集合也提供了能防止多个进程同时修改一个容器内容的机制。若在一个容器里反复,同时另一些进程介入,并在那个容器中插入、删除或修改一个对象,便会面临发生冲突的危险。我们可能已传递了那个对象,可能它位位于我们前面,可能容器的大小在我们调用size()后已发生了收缩——我们面临各种各样可能的危险。针对这个问题,新的集合库集成了一套解决的机制,能查出除我们的进程自己需要负责的之外的、对容器的其他任何修改。若探测到有其他方面也预备修改容器,便会立即产生一个ConcurrentModificationException(并发修改违例)。我们将这一机制称为“立即失败”——它并不用更复杂的算法在“以后”侦测问题,而是“立即”产生违例。
上一篇:现有一些ORM工具的弊端 人气:988
下一篇:java 1.4中工具的改变和更新 人气:451
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐