一、Collections工具类概述

  1、为List、Set、Map等集合提供大量方法对集合元素进行排序、查询和修改等操作。

  2、将集合对象设置为不可变。

  3、对集合对象实现同步控制等。

二、排序操作

  a、void reverse(List list):反转指定List集合里的元素。

  b、void shuffle(List list):对List集合元素进行随机排序(模拟洗牌动作)。

  c、void sort(List list):根据元素的自然顺序对指定List集合的元素按升序进行排序。

  d、void sort(List list,Comparator c):根据指定的Comparator产生的顺序对List集合元素进行排序。

  e、void swap(List list,int i,int j):将List集合中的i,j元素进行交换。

  f、void rotate(List list,int distance):当distance为正数时,将list集合的后distance元素整体移到前面,当distance为负数时,将list集合的前distance元素整体移到后面,该操作不会改变list长度。

  下面简单示范了Collections工具类对List集合的操作: 

 import java.util.ArrayList;
 import java.util.Collections;

 public class Main {
     public static void main(String[] args) {
         ArrayList al = new ArrayList<>();
         al.add(1);
         al.add(6);
         al.add(3);
         System.out.println(al);
         Collections.reverse(al);
         System.out.println(al);
         Collections.sort(al);
         System.out.println(al);
         Collections.shuffle(al);
         System.out.println(al);
     }
 }
 [1, 6, 3]
 [3, 6, 1]
 [1, 3, 6]
 [6, 3, 1]

三、查找、替换操作类方法

  a、int binarySearch(List list,Object key):使用二分法查找指定List集合,以获得指定对象在List中索引,前提是List处于有序状态。

  b、Object max(Collection coll):根据元素的插入顺序,返回给定集合中的最大元素。

  c、Object max(Collection coll,Comparator comp):根据Comparator指定的顺序,返回给定集合中的最大元素。 

  d、Object min(Collection coll):根据元素的插入顺序,返回给定集合中的最小元素。

  e、Object min(Collection coll,Comparator comp):根据Comparator指定的顺序,返回给定集合中的最小元素。

  f、void fill(List list,Object obj):使用指定元素Object,替换指定List集合中的所有元素。

  g。int frequency(Collection c,Object o):返回指定集合中指定元素的出现次数。

  h、int indexOfSubList(List source,List target):返回子List对象在父List对象第一次出现的位置索引,父List没有这样的子List,返回-1.

  i、boolean replaceAll(List list,Object oldVal,Object newVal):使用一个新newVal值替换List对象的所有旧值oldVal。

  下面的程序进行简单示范:  

 import java.util.ArrayList;
 import java.util.Collections;

 public class Main {
     public static void main(String[] args) {
         ArrayList al = new ArrayList<>();
         al.add(1);
         al.add(6);
         al.add(3);
         al.add(3);
         al.add(-1);
         al.add(4);
         System.out.println(al);
         System.out.println("-----------------");
         System.out.println(Collections.max(al));
         System.out.println(Collections.min(al));
         System.out.println("-----------------");
         Collections.replaceAll(al, 3, 10);
         System.out.println(al);
         System.out.println("-----------------");
         Collections.sort(al);
         System.out.println(al);
         System.out.println(Collections.binarySearch(al, 4));
     }
 }
 [1, 6, 3, 3, -1, 4]
 -----------------
 6
 -1
 -----------------
 [1, 6, 10, 10, -1, 4]
 -----------------
 [-1, 1, 4, 6, 10, 10]
 2

四、同步控制

  Collections类提供多个synchronizedXxx()方法,可以将指定集合包装为线程同步集合,解决多线程并发访问的线程安全问题。

  常用集合HashSet、TreeSet、ArrayList、ArrayDeque、LinkedList、HashMap、TreeMap都是线程不安全的。

  下面的实例创建了四个线程安全的集合: 

 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;

 public class Main {
     public static void main(String[] args) {
         Collection collection = Collections.synchronizedCollection(new ArrayList<>());
         List list = Collections.synchronizedList(new ArrayList<>());
         Set set = Collections.synchronizedSet(new HashSet<>());
         Map map = Collections.synchronizedMap(new HashMap<>());

     }
 }

五、设置不可变集合

  设置不可变集合,可以生产“只读”的Collection或Map。

  通过以下三个方法可以设置:

  a、emptyXxx():返回一个空的、不可变的集合对象。

  b、singletonXxx():返回一个包含指定对象(只有一个或一项元素)的、不可变的集合对象。

  c、unmodifiableXxx():返回指定集合对象的不可变视图。

  以下程序简单示范一般用法和改变集合的异常: 

 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;

 public class Main {
     public static void main(String[] args) {
         List ueList = Collections.emptyList();
         Set ueSet = Collections.singleton(new String("single"));
         Map scorse = new HashMap<>();
         scorse.put("yuwen", 100);
         Map uescorse = Collections.unmodifiableMap(scorse);
         uescorse.put(10, 20);
         ueList.add(10);
         ueSet.add(100);
     }
 }
 Exception in thread "main" java.lang.UnsupportedOperationException
     at java.util.Collections$UnmodifiableMap.put(Unknown Source)
     at Main.main(Main.java:14)

【Java】集合_Collections_学习记录的更多相关文章

  1. Java集合框架学习(一)List

    先附一张Java集合框架图. 从上面的集合框架图可以看到,Java集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Coll ...

  2. java 项目相关 学习记录

    一位资深程序员大牛给予Java初学者的学习路线建议  [任何时期都可以好好看看] https://www.imooc.com/article/8993 https://www.jianshu.com/ ...

  3. java集合的学习笔记

    不知不觉也到了java集合这一章的学习,这因该是挺重要的一个章节,因为所有的程序都离不开数据,而一个良好的数据结构和算法应该是程序的灵魂吧. 今天对自己所初步了解的做一个总结: 数据结构是计算机存储. ...

  4. Java集合框架学习

    集合框架 集合框架的目标 该框架必须是高性能的.基本集合(动态数组,链表,树,哈希表)的实现必须是高效的. 该框架允许 不同类型的集合,以类似的方式工作,具有高度的互操作性. 对一个集合的扩展和适应必 ...

  5. Java集合框架学习总结

    转自:http://www.cnblogs.com/oubo/archive/2012/01/07/2394639.html Oubo的博客 以下介绍经常使用的集合类,这里不介绍集合类的使用方法,只介 ...

  6. 转:java高并发学习记录-死锁,活锁,饥饿

    死锁 两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 为什么会产生死锁: ① 因为系统资源不足. ② 进程运行推进的顺序不合适.    ③ ...

  7. 【java基础 11】java集合框架学习

    导读:本篇博客主要是从整体上了解java的集合框架,然后主要介绍几个自己在项目中用到的结构,比如说:hashtable.hashmap.hashset.arraylist等! 一.宏观预览 从宏观上看 ...

  8. Java集合框架学习笔记

    集合类的由来:对象用于封装特有数据,对象多了需要存储,如果对象的长度不确定,就使用集合存储. 集合特点1.用于存储对象的容器.2.集合的长度可变.3.集合中不可以存储基本类型 集合容器因为内部的数据结 ...

  9. JAVA 动态代理学习记录

    打算用JAVA实现一个简单的RPC框架,看完RPC参考代码之后,感觉RPC的实现主要用到了两个方面的JAVA知识:网络通信和动态代理.因此,先补补动态代理的知识.---多看看代码中写的注释 参考:Ja ...

随机推荐

  1. Linux简单程序实例(GNU工具链,进程,线程,无名管道pipe,基于fd的文件操作,信号,scoket)

    一, GNU工具链简介: (1)编译代码步骤: 预处理 -> 编译 -> 汇编 -> 链接: 预处理:去掉注释,进行宏替换,头文件包含等工作: gcc -E test.c -o te ...

  2. MVVM模式应用 之介绍

    M-V-VM (1)M:即Model,由现实世界抽象出来的模型: V:即View,视图,界面,该界面与用户输入设备进行交互: 但是View与Model如何进行交互呢? Binding便可以发挥作用了, ...

  3. MVVM模式应用 之在ViewModel中使用NavigationService

    在ViewModel.cs页面中是不能使用NavigationService,那该怎么实现跳转呢? 其实在ViewModel中实现页面的跳转也很简单,下面的代码: using Microsoft.Ph ...

  4. DataTable 无法转换的错误

    目前基本上检索都已经离不开Linq了.所以最近在Linq的过程中出现了一些意外情况,特此记录下来. 先描述一下场景: 有一个查询的要求是这样的,检索出Status > 1 的数据.因为要根据其他 ...

  5. MAC OX 配置JDK环境变量

    大家在windows里面配置JDK环境变量很容易,但是如果要在mac里面配置JDK环境变量和windows里面有所不同,具体如下: 第一: mac OS里面自带jdk,不过是1.6的版本,现在很多人使 ...

  6. ruby定时脚本

    ruby定时脚本的实现涉及到三个方面: 要定时执行的代码 定时控制(设置定时的时间) 将脚本后台化 实例: # in func.rb def func # the function body goes ...

  7. 使用Style自定义ListView快速滑动图标

    一.显示ListView快速滑动块图标 设想这样一个场景,当ListView的内容有大于100页的情况下,如果想滑动到第80页,用手指滑动到指定位置,无疑是一件很费时的事情,如果想快速滑动到指定的位置 ...

  8. bootstrap datepicker时间插件显示位置不对

    bppystrap-datetimepicker.min.js中,修改如下:将原来的        if(!b(this.element)){l=l+document.body.scrollTop}改 ...

  9. ShareSDK(iOS版)开发实践:自定义授权视图和分享视图导航栏

    最近很多人问ShareSDK的授权视图和分享视图的导航栏样式与应用风格不一致,能否修改导航栏的样式?那么这里我就2.6.1版本进行说明(还在使用1.x版本的朋友建议升级到2.x版本,在新版本中可定制的 ...

  10. ViewController 的loadView、viewDidLoad、viewDidUnload分别是什么时候调用的,在自定义ViewCointroller时在这几个函数中应该做什么工作?

    由init.loadView.viewDidLoad.viewDidUnload.dealloc的关系说起 init方法 在init方法中实例化必要的对象(遵从LazyLoad思想) init方法中初 ...