首頁 > Java > java教程 > 主體

Collections工具類別提供了四種靜態方法的操作

Y2J
發布: 2017-05-09 11:31:43
原創
3076 人瀏覽過

Collections工具類別提供了大量針對Collection/Map的操作。這篇文章主要介紹了Collections工具類_動力節點Java學院整理,需要的朋友可以參考下

Collections工具類提供了大量針對Collection/Map的操作,總體可分為四類,都為靜態(static)方法:

1. 排序操作(主要針對List介面相關)

  •  reverse( List list):反轉指定List集合中元素的順序

  •  shuffle(List list):隨機排序List中的元素







 sort(List list):將List裡的元素依照自然升序排序

 sort(List list, Comparator c):自訂比較器進行排序
  •  swap(List list, int i, int j):將指定List集合中i處元素與j出元素交換
  •  rotate(List list, int distance):將所有元素向右移位指定長度,如果distance等於size那麼結果不變 
  • public void testSort() {
        System.out.println("原始顺序:" + list);
        Collections.reverse(list);
        System.out.println("reverse后顺序:" + list);
        Collections.shuffle(list);
        System.out.println("shuffle后顺序:" + list);
        Collections.swap(list, 1, 3);
        System.out.println("swap后顺序:" + list);
        Collections.sort(list);
        System.out.println("sort后顺序:" + list);
        Collections.rotate(list, 1);
        System.out.println("rotate后顺序:" + list);
      }
    登入後複製

    輸出
  • #原始順序:[b張三, d孫六, a李四, e錢七, c趙五]

    reverse後順序:[c趙五, e錢七, a李四, d孫六, b張三]
  • shuffle後順序:[b張三, c趙五, d孫六, e錢七, a李四]
  • swap後順序:[b張三, e錢七, d孫六, c趙五, a李四]

    sort後順序:[a李四, b張三, c趙五, d孫六, e錢七]

    rotate後順序:[e錢七, a李四, b張三, c趙五, d孫六]
  • 2. 尋找與取代(主要針對Collection介面相關)

  •  binarySearch(List list, Object key):使用二分搜尋法,得到指定物件在List中的索引,前提是集合已經排序
  •  max( Collection coll):傳回最大元素


 max(Collection coll, Comparator comp):根據自訂比較器,傳回最大元素




 min(Collection coll):回傳最小元素



 min(Collection coll, Comparator comp):根據自訂比較器,傳回最小元素

 fill(List list, Object obj):使用指定物件填入

 frequency(Collection Object o):傳回指定集合中指定物件出現的次數 replaceAll(List list, Object old, Object new):取代 

輸出給給定的list: [b張三, d孫六, a李四, e錢七, c趙五]max:e錢七
min:a李四

frequency:1

replaceAll之後:[ b張三, d孫六, aa李四, e錢七, c趙五]

binarySearch在sort之前:-4

binarySearch在sort之後:2fill:[A, A, A , A, A]

3. 同步控制

#Collections工具類別中提供了多個syn

chronizedXxx方法,該方法傳回指定集合對象對應的同步對象,從而解決多執行緒並發存取集合時執行緒的安全

#問題。

HashSetArray

List、HashMap都是執行緒不安全的,如果需要考慮同步,則使用這些方法。這些方法主要有:synchronizedSet、synchronizedSortedSet、synchronize

dL
ist、synchronizedMap、synchronizedSortedMap。


特別需要指出的是,在使用迭代方法遍歷集合時需要手動同步傳回的集合。

 Map m = Collections.synchronizedMap(new HashMap());
   ...
 Set s = m.keySet(); // Needn't be in synchronized block
   ...
 synchronized (m) { // Synchronizing on m, not s!
   Iterator i = s.iterator(); // Must be in synchronized block
   while (i.hasNext())
     foo(i.next());
 }
登入後複製

###4. 設定不可變集合#########Collections有三類方法可以傳回一個不可變集合:######1. emptyXxx():傳回一個空的不可變的集合物件######2. singletonXxx():傳回一個只包含指定物件的,不可變的集合物件。 ######3. unmodifiableXxx():傳回指定集合物件的不可變###檢視######
  public void testUnmodifiable() {
    System.out.println("给定的list:" + list);
    List<String> unmodList = Collections.unmodifiableList(list);
    unmodList.add("再加个试试!"); // 抛出:java.lang.UnsupportedOperationException
    // 这一行不会执行了
    System.out.println("新的unmodList:" + unmodList);
  }
登入後複製
######5. ###其它######### ####1. disjoint(Collection c1, Collection c2) - 如果兩個指定collection 中沒有相同的元素,則傳回true。 #########2. addAll(Collection c, T... a) - 一種方便的方式,將所有指定元素加入指定 collection 中。示範: ###Collections.addAll(flavors, "Peaches 'n Plutonium", "Rocky Racoon");######

3. Comparator reverseOrder(Comparator cmp) - 返回一个比较器,它强行反转指定比较器的顺序。如果指定比较器为 null,则此方法等同于 reverseOrder()(换句话说,它返回一个比较器,该比较器将强行反转实现 Comparable 接口那些对象 collection 上的自然顺序)。

public void testOther() {
    List<String> list1 = new ArrayList<String>();
    List<String> list2 = new ArrayList<String>();
    // addAll增加变长参数
    Collections.addAll(list1, "大家好", "你好","我也好");
    Collections.addAll(list2, "大家好", "a李四","我也好");
    // disjoint检查两个Collection是否的交集
    boolean b1 = Collections.disjoint(list, list1);
    boolean b2 = Collections.disjoint(list, list2);
    System.out.println(b1 + "\t" + b2);
    // 利用reverseOrder倒序
    Collections.sort(list1, Collections.reverseOrder());
    System.out.println(list1);
  }
登入後複製

输出

true false

[我也好, 大家好, 你好]

6. 完整代码

package com.bjpowernode.test;
import java.util.*;
import org.junit.Before;
import org.junit.Test;
public class CollectionsTest {
  private List list = new ArrayList();
  @Before
  public void init() {
    // 准备测试数据
    list.add("b张三");
    list.add("d孙六");
    list.add("a李四");
    list.add("e钱七");
    list.add("c赵五");
  }
  @Test
  public void testUnmodifiable() {
    System.out.println("给定的list:" + list);
    List<String> unmodList = Collections.unmodifiableList(list);
    unmodList.add("再加个试试!"); // 抛出:java.lang.UnsupportedOperationException
    // 这一行不会执行了
    System.out.println("新的unmodList:" + unmodList);
  }
  @Test
  public void testSort() {
    System.out.println("原始顺序:" + list);
    Collections.reverse(list);
    System.out.println("reverse后顺序:" + list);
    Collections.shuffle(list);
    System.out.println("shuffle后顺序:" + list);
    Collections.swap(list, 1, 3);
    System.out.println("swap后顺序:" + list);
    Collections.sort(list);
    System.out.println("sort后顺序:" + list);
    Collections.rotate(list, 1);
    System.out.println("rotate后顺序:" + list);
  }
  @Test
  public void testSearch() {
    System.out.println("给定的list:" + list);
    System.out.println("max:" + Collections.max(list));
    System.out.println("min:" + Collections.min(list));
    System.out.println("frequency:" + Collections.frequency(list, "a李四"));
    Collections.replaceAll(list, "a李四", "aa李四");
    System.out.println("replaceAll之后:" + list);
    // 如果binarySearch的对象没有排序的话,搜索结果是不确定的
    System.out.println("binarySearch在sort之前:" + Collections.binarySearch(list, "c赵五"));
    Collections.sort(list);
    // sort之后,结果出来了
    System.out.println("binarySearch在sort之后:" + Collections.binarySearch(list, "c赵五"));
    Collections.fill(list, "A");
    System.out.println("fill:" + list);
  }
  @Test
  public void testOther() {
    List<String> list1 = new ArrayList<String>();
    List<String> list2 = new ArrayList<String>();
    // addAll增加变长参数
    Collections.addAll(list1, "大家好", "你好","我也好");
    Collections.addAll(list2, "大家好", "a李四","我也好");
    // disjoint检查两个Collection是否的交集
    boolean b1 = Collections.disjoint(list, list1);
    boolean b2 = Collections.disjoint(list, list2);
    System.out.println(b1 + "\t" + b2);
    // 利用reverseOrder倒序
    Collections.sort(list1, Collections.reverseOrder());
    System.out.println(list1);
  }
}
登入後複製

【相关推荐】

1. Java免费视频教程

2. YMP在线手册

3. 全面解析Java注解

以上是Collections工具類別提供了四種靜態方法的操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!