Collections工具类:操作集合的工具类

Collections工具类:操作集合的工具类

Java提供了一个操作Set List Map等集合的工具类:Collections,该工具类提供了大量方法对集合元素进行排序、查询和修改等操作。还提供了将集合对象设置为不可变,对集合对象实现同步控制等方法。

排序操作

    ArrayList arrayList = new ArrayList();
    arrayList.add(2);
    arrayList.add(-1);
    arrayList.add(4);
    arrayList.add(6);
    System.out.println(arrayList); // [2, -1, 4, 6]
    Collections.sort(arrayList); //按自然顺序排序
    System.out.println(arrayList); //[-1, 2, 4, 6]
    Collections.reverse(arrayList); //按倒序排序
    System.out.println(arrayList); //[6, 4, 2, -1]
    Collections.swap(arrayList,0,1);//将0号索引与1号索引的元素换一下
    System.out.println(arrayList);  //[4, 6, 2, -1]
    Collections.shuffle(arrayList); //随机排序
    System.out.println(arrayList);

查找、替换操作

    ArrayList arrayList = new ArrayList();
    arrayList.add(2);
    arrayList.add(-1);
    arrayList.add(4);
    arrayList.add(6);
    System.out.println(arrayList);
    System.out.println(Collections.max(arrayList)); //按照自然排序,输出最大元素
    System.out.println(Collections.min(arrayList)); //按照自然排序,输出最小元素
    Collections.replaceAll(arrayList,4,-1);//把所有的4换成-1
    System.out.println(arrayList);
    System.out.println(Collections.frequency(arrayList,-1)); //输出-1在arrayList中出现的次数

    Collections.sort(arrayList); //只有排序后的List集合才能用二分法查询
    System.out.println(Collections.binarySearch(arrayList,6)); //二分法查询6的索引

同步控制

Collections中提供了多个synchronizedXxx()方法,该方法可以将指定集合包装成线程同步的集合,从而解决多线程并发访问集合时的线程安全问题。

Java中常用的集合框架中的实现类:HashSet TreeSet ArrayList ArrayDeque LinkedList HashMap 和 TreeMap 都是线程不安全的。如果有多个线程访问它们,而且有超过一个的线程试图修改它们,则存在线程安全的问题。

    Collection collection = Collections.synchronizedCollection(new ArrayList());
    List list = Collections.synchronizedList(new ArrayList());
    Set set = Collections.synchronizedSet(new HashSet());
    Map map = Collections.synchronizedMap(new HashMap());

设置不可变集合

    //创建一个空的、不可改变的List对象
    List unmodifiableList = Collections.emptyList();
    //创建一个只有一个元素,且不可改变的Set对象
    Set unmodifiableSet = Collections.singleton("only");
    //创建一个普通的Map对象
    Map map = new HashMap();
    map.put("saber", "阿尔托莉雅");
    map.put("archer", "emiya");
    //返回map集合的不可变版本,只读版本
    Map unmodifiableMap = Collections.unmodifiableMap(map);
    System.out.println(unmodifiableMap);

古老的接口Enumeration接口用来遍历古老的集合Vector Hashtable

    Vector vector = new Vector();
    vector.add(1);
    vector.add(2);
    vector.add(3);
    Hashtable hashtable = new Hashtable();
    hashtable.put("a",1);
    hashtable.put("b",2);
    hashtable.put("c",3);
    Enumeration enumeration = vector.elements();
    while (enumeration.hasMoreElements()){
        System.out.println(enumeration.nextElement());
    }

    Enumeration keyEm = hashtable.keys();
    while (keyEm.hasMoreElements()){
        Object key = keyEm.nextElement();
        System.out.println(key + "-->" + hashtable.get(key));
    }

猜你喜欢

转载自www.cnblogs.com/woshi123/p/12509858.html