友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

Java编程思想第4版[中文版](PDF格式)-第119章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




    print(a);  

    Arrays。sort(a);  

    print(a);  

    int loc = Arrays。binarySearch(a; a'3');  

    System。out。println(〃Location of 〃 + a'3' +  

     〃 = 〃 + loc);  

  }  

} ///:~  

  

当然,我们的 pareTo()方法亦可根据实际情况增大复杂程度。  

  

3。 列表  

可用与数组相同的形式排序和搜索一个列表(List )。用于排序和搜索列表的静态方法包含在类 

Collections 中,但它们拥有与Arrays 中差不多的签名:sort(List)用于对一个实现了 parable 的对象 

列表进行排序;binarySearch(List;Object)用于查找列表中的某个对象;sort(List;parator)利用一个 

 “比较器”对一个列表进行排序;而binarySearch(List;Object;parator)则用于查找那个列表中的一个 

对象(注释⑨)。下面这个例子利用了预先定义好的pClass 和 Alphap 来示范 Collections 中的各种 

排序工具:  

  

//: ListSort。java  

// Sorting and searching Lists with 'Collections'  

package c08。newcollections;  

import java。util。*;  

  

public class ListSort {  

  public static void main(String'' args) {   

    final int SZ = 20;  

    // Using 〃natural parison method〃:  

    List a = new ArrayList();  

    for(int i = 0; i 《 SZ; i++)  

      a。add(new pClass(  

        (int)(Math。random() *100)));  

    Collection1。print(a);  

    Collections。sort(a);  

    Collection1。print(a);  

    Object find = a。get(SZ/2);  



                                                                                          258 


…………………………………………………………Page 260……………………………………………………………

    int loc = Collections。binarySearch(a; find);  

    System。out。println(〃Location of 〃 + find +  

     〃 = 〃 + loc);  

    // Using a parator:  

    List b = new ArrayList();  

    for(int i = 0; i 《 SZ; i++)  

      b。add(Array1。randString(4));  

    Collection1。print(b);  

    Alphap ac = new Alphap();  

    Collections。sort(b; ac);  

    Collection1。print(b);  

    find = b。get(SZ/2);  

    // Must use the parator to search; also:  

    loc = Collections。binarySearch(b; find; ac);  

    System。out。println(〃Location of 〃 + find +  

     〃 = 〃 + loc);  

  }  

} ///:~  

  

⑨:在本书写作时,已宣布了一个新的Collections。stableSort(),可用它进行合并式排序,但还没有它的 

测试版问世。  

  

这些方法的用法与在Arrays 中的用法是完全一致的,只是用一个列表代替了数组。  

TreeMap 也必须根据 parable 或者parator 对自己的对象进行排序。  



8。7。8  实用工具  



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

  



enumeration(Collection) Produces an old…style E n u m e r a t i o n  for the argument。  



m a x ( C o l l e c t i o n )     Produces the maximum or minimum element in the argument using the  

m i n ( C o l l e c t i o n )   natural parison method of the objects in the C o l l e c t i o n 。  



m a x ( C o l l e c t i o n ;   Produces the maximum or minimum element in the Collection using the  

C o m p a r a t o r )         C o m p a r a t o r 。   

m i n ( C o l l e c t i o n ;   

C o m p a r a t o r )   



nCopies(int n; Object o) Returns an immutable L i s t of size n  whose handles all point to o。  



subList(List; int min; int Returns a new L i s t  backed by the specified argument List  that is a  

m a x )                       window into that argument with indexes starting at min  and stopping  

                              just before max 。   



  

enumeration(Collection) 为自变量产生原始风格的Enumeration (枚举)  

max(Collection),min(Collection) 在自变量中用集合内对象的自然比较方法产生最大或最小元素  

max(Collection;parator),min(Collection;parator) 在集合内用比较器产生最大或最小元素  

nCopies(int n; Object o) 返回长度为 n 的一个不可变列表,它的所有句柄均指向o  

subList(List;int min;int max) 返回由指定参数列表后推得到的一个新列表。可将这个列表想象成一个 

 “窗口”,它自索引为min 的地方开始,正好结束于max 的前面  

  

注意min()和max()都是随同Collection 对象工作的,而非随同 List,所以不必担心Collection 是否需要 

排序(就象早先指出的那样,在执行一次 binarySearch()——即二进制搜索——之前,必须对一个 List 或 

者一个数组执行 sort())。  



                                                                                                   259 


…………………………………………………………Page 261……………………………………………………………

  

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 状态,并可从一个方法 

调用中返回指向那个容器的一个只读句柄。这样一来,虽然我们可在类里修�
返回目录 上一页 下一页 回到顶部 赞(1) 踩(1)
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!