当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:17:00  来源:本站整理

<b>Collections类中的实用工具</b>[Java编程]

赞助商链接



  本文“<b>Collections类中的实用工具</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

Collections类中含有其他大量有效的实用工具(如表二):

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的前面

enumeration(Collection)

Produces an old-style Enumeration for the argument.

max(Collection)

min(Collection)

Produces the maximum or minimum element in the argument using the natural comparison method of the objects in the Collection.

max(Collection, Comparator)

min(Collection, Comparator)

Produces the maximum or minimum element in the Collection using the Comparator.

nCopies(int n, Object o)

Returns an immutable List of size n whose handles all point to o.

subList(List, int min, int max)

Returns a new List backed by the specified argument List that is a window into that argument with indexes starting at min and stopping just before 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(并发改正违例).我们将这一机制称为“当即失利”——它并不用更复杂的算法在“今后”侦测问题,而是“当即”产生违例.
  以上是“<b>Collections类中的实用工具</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .