Collections类介绍

这个类操作或返回集合的专有静态方法。

它包含多态算法,利用wrappers(封装器)返回指定集合类型的新集合,以及其他一些零散功能。



如果该类的方法引用的集合或类对象为null,会抛出NullPointerException。

这个类还破坏性(destructive)算法,也就是说,如果调用了集合不支持的方法,它会抛出

UnsupportedOperationException。

类定义

public class Collections

extends Object

常用操作介绍

1.Collections提供以下方法对List进行排序操作

void reverse(List list):反转



void shuffle(List list),随机排序



void sort(List list),按自然排序的升序排序



void sort(List list, Comparator c);定制排序,由Comparator控制排序逻辑



void swap(List list, int i , int j),交换两个索引位置的元素

void rotate(List list, int distance),旋转。当distance为正数时,将list后distance个元素整体移到前面。当distance为负数时,

将 list的前distance个元素整体移到后面。

2.查找,替换操作

int binarySearch(List list, Object key), 对List进行二分查找,返回索引,注意List必须是有序的

int max(Collection coll),根据元素的自然顺序,返回最大的元素。 类比int min(Collection coll)

int max(Collection coll, Comparator c),根据定制排序,返回最大元素,排序规则由Comparatator类控制。类比int

min(Collection coll, Comparator c)

void fill(List list, Object obj),用元素obj填充list中所有元素



int frequency(Collection c, Object o),统计元素出现次数

int indexOfSubList(List list, List target), 统计targe在list中第一次出现的索引,找不到则返回-1,类比int

lastIndexOfSubList(List source, list target).

boolean replaceAll(List list, Object oldVal, Object newVal), 用新元素替换旧元素。

3.同步控制

Collections中几乎对每个集合都定义了同步控制方法,

例如 SynchronizedList(), SynchronizedSet()等方法,来将集合包装成线程安全的集合。

下面是Collections将普通集合包装成线程安全集合的用法。

4.设置不可变(只读)集合

Collections提供了三类方法返回一个不可变集合,



emptyXXX(),返回一个空的只读集合(这不知用意何在?)



singleXXX(),返回一个只包含指定对象,只有一个元素,只读的集合。



unmodifiablleXXX(),返回指定集合对象的只读视图。

代码:

package com.dylan.collection;

import java.util.*;

/**
* @author xusucheng
* @create 2018-02-04
**/
public class CollectionsDemo {
public static void main(String[] args) { //1. 操作List
operateList();
//2. 查找替换
findReplace();
//3. 同步控制
syncControl();
//4. 设置不可变(只读)集合
setReadOnly();
} private static void operateList(){
ArrayList nums = new ArrayList();
nums.add(8);
nums.add(-3);
nums.add(2);
nums.add(9);
nums.add(-2);
System.out.println(nums);
Collections.reverse(nums);
System.out.println(nums);
Collections.sort(nums);
System.out.println(nums);
Collections.shuffle(nums);
System.out.println(nums);
//下面只是为了演示定制排序的用法,将int类型转成string进行比较
Collections.sort(nums, new Comparator() { @Override
public int compare(Object o1, Object o2) {
String s1 = String.valueOf(o1);
String s2 = String.valueOf(o2);
return s1.compareTo(s2);
} });
System.out.println(nums);
} private static void findReplace(){
ArrayList num = new ArrayList();
num.add(3);
num.add(-1);
num.add(-5);
num.add(10);
System.out.println(num);
System.out.println(Collections.max(num));
System.out.println(Collections.min(num));
Collections.replaceAll(num, -1, -7);
System.out.println(Collections.frequency(num, 3));
Collections.sort(num);
System.out.println(Collections.binarySearch(num, -5));
} private static void syncControl(){
Collection c = Collections.synchronizedCollection(new ArrayList());
List list = Collections.synchronizedList(new ArrayList());
Set s = Collections.synchronizedSet(new HashSet());
Map m = Collections.synchronizedMap(new HashMap());
} private static void setReadOnly(){
List lt = Collections.emptyList();
Set st = Collections.singleton("avs"); Map mp = new HashMap();
mp.put("a",100);
mp.put("b", 200);
mp.put("c",150);
Map readOnlyMap = Collections.unmodifiableMap(mp); //下面会报错
lt.add(100);
st.add("sdf");
mp.put("d", 300);
}
}

输出:

[8, -3, 2, 9, -2]
[-2, 9, 2, -3, 8]
[-3, -2, 2, 8, 9]
[-3, 9, 8, 2, -2]
[-2, -3, 2, 8, 9]
[3, -1, -5, 10]
10
-5
1
1
Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:148)
    at java.util.AbstractList.add(AbstractList.java:108)
    at com.dylan.collection.CollectionsDemo.setReadOnly(CollectionsDemo.java:83)
    at com.dylan.collection.CollectionsDemo.main(CollectionsDemo.java:19)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

Process finished with exit code 1

Java集合框架学习(十三) Collections类详解的更多相关文章

  1. Java基础-DBCP连接池(BasicDataSource类)详解

    Java基础-DBCP连接池(BasicDataSource类)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 ...

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

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

  3. 【JAVA集合框架一 】java集合框架官方介绍 Collections Framework Overview 集合框架总览 翻译 javase8 集合官方文档中文版

    原文链接: https://docs.oracle.com/javase/8/docs/technotes/guides/collections/overview.html 原文内容也一并附加在本文最 ...

  4. Java集合框架学习

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

  5. java 复习整理(四 String类详解)

    String 类详解   StringBuilder与StringBuffer的功能基本相同,不同之处在于StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此效率上S ...

  6. Java基础学习(四)-- 接口、集合框架、Collection、泛型详解

    接口 一.接口的基本概念 关键字为:Interface,在JAVA编程语言中是一个抽象类型,是抽象方法的集合.也是使用.java文件编写.   二.接口声明 命名规范:与类名的命名规范相同,通常情况下 ...

  7. Java集合框架学习笔记

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

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

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

  9. java集合HashMap、HashTable、HashSet详解

    一.Set和Map关系 Set代表集合元素无序,集合元素不可重复的集合,Map代表一种由多个key-value组成的集合,map集合是set集合的扩展只是名称不同,对应如下 二.HashMap的工作原 ...

  10. Java集合框架的接口和类层次关系结构图

    Collection和Collections的区别 首先要说的是,"Collection" 和 "Collections"是两个不同的概念: 如下图所示,&qu ...

随机推荐

  1. 海思Hi35xx 通过uboot 读取U盘文件进行固件升级

    前言 基本过程为:uboot 启动后,通过命令将U盘的的文件读取到内存中,再通过uboot 的flash 写入命令将读取到内存中的升级文件写入到flash的固定位置. (一)usb常用命令 uboot ...

  2. cancal报错 config dir not found

    替换classpath中间封号两边的值

  3. [转帖]Linux 性能监控 Sar (Sysstat) 示例

    https://bbs.huaweicloud.com/blogs/345343#   [摘要] 使用 sar,您可以实时监控各种 Linux 子系统(CPU.内存.I/O..)的性能,还可以持续收集 ...

  4. Chrony 的学习与使用

    Chrony 的学习与使用 背景 之前捯饬 ntp 发现很麻烦, 经常容易弄错了. 昨天处理文件精确时间时 想到了时间同步. 发现只有自己总结的ntpdate 但是还没有 chronyd相关的总结 本 ...

  5. [转帖]haproxy

    HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理. HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保 ...

  6. [转帖]TiKV读写流程浅析

    https://www.cnblogs.com/luohaixian/p/15227838.html 1.TiKV框架图和模块说明 图1  TiKV整体架构图 1.1.各模块说明 PD Cluster ...

  7. [转帖]KingbaseES V8R6 中walminer的使用

    https://www.cnblogs.com/kingbase/p/17315750.html 前言 walminer工具可以帮助dba挖掘wal日志中的内容,看到某时间对应数据库中的具体操作.例如 ...

  8. ggrep让多行日志-无处遁形!

    相信大家都很喜欢用grep指令,查一下项目中有没有出错的,然后通过logid搜索相关出错的日志和一些关键参数,但是在多行日志的情况下就很难处理了,比如okhttp拦截器中分别打印了url,param和 ...

  9. 独立安装VS的C++编译器build tools

    Microsoft C++ 生成工具 Microsoft C++ 生成工具 - Visual Studio Microsoft C++ 生成工具通过可编写脚本的独立安装程序提供 MSVC 工具集,无需 ...

  10. vim 从嫌弃到依赖(18)——查找模式进阶

    上一篇文章中,我们初步结识了如何使用查找模式,也能够通过n和 N进行查找.这篇将会介绍搜索中更高级的用法.另外在写上一篇文章的时候我发现介绍查找相关内容的时候不能用动图来演示,主要是因为输入的内容太多 ...