排序操作

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个元素整体移到后面。

下面简单演示Collections操作List

 1 package collection;2 3 import java.util.ArrayList;4 import java.util.Collections;5 import java.util.Comparator;6 7 public class CollectionsTest {8     public static void main(String[] args) {9         ArrayList nums =  new ArrayList();
10         nums.add(8);
11         nums.add(-3);
12         nums.add(2);
13         nums.add(9);
14         nums.add(-2);
15         System.out.println(nums);
16         Collections.reverse(nums);
17         System.out.println(nums);
18         Collections.sort(nums);
19         System.out.println(nums);
20         Collections.shuffle(nums);
21         System.out.println(nums);
22         //下面只是为了演示定制排序的用法,将int类型转成string进行比较
23         Collections.sort(nums, new Comparator() {
24
25             @Override
26             public int compare(Object o1, Object o2) {
27                 // TODO Auto-generated method stub
28                 String s1 = String.valueOf(o1);
29                 String s2 = String.valueOf(o2);
30                 return s1.compareTo(s2);
31             }
32
33         });
34         System.out.println(nums);
35     }
36 }

执行结果,

1 [8, -3, 2, 9, -2]
2 [-2, 9, 2, -3, 8]
3 [-3, -2, 2, 8, 9]
4 [9, -2, 8, 2, -3]
5 [-2, -3, 2, 8, 9]

查找,替换操作

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), 用新元素替换旧元素。

下面示范简单用法,

 1 package collection.collections;2 3 import java.util.ArrayList;4 import java.util.Collections;5 6 public class CollectionsTest {7     public static void main(String[] args) {8         ArrayList num =  new ArrayList();9         num.add(3);
10         num.add(-1);
11         num.add(-5);
12         num.add(10);
13         System.out.println(num);
14         System.out.println(Collections.max(num));
15         System.out.println(Collections.min(num));
16         Collections.replaceAll(num, -1, -7);
17         System.out.println(Collections.frequency(num, 3));
18         Collections.sort(num);
19         System.out.println(Collections.binarySearch(num, -5));
20     }
21 }

执行结果,

1 [3, -1, -5, 10]
2 10
3 -5
4 1
5 1

同步控制

Collections中几乎对每个集合都定义了同步控制方法,例如 SynchronizedList(), SynchronizedSet()等方法,来将集合包装成线程安全的集合。下面是Collections将普通集合包装成线程安全集合的用法,

 1 package collection.collections;2 3 import java.util.ArrayList;4 import java.util.Collection;5 import java.util.Collections;6 import java.util.HashMap;7 import java.util.HashSet;8 import java.util.List;9 import java.util.Map;
10 import java.util.Set;
11
12 public class SynchronizedTest {
13     public static void main(String[] args) {
14         Collection c = Collections.synchronizedCollection(new ArrayList());
15         List list = Collections.synchronizedList(new ArrayList());
16         Set s = Collections.synchronizedSet(new HashSet());
17         Map m = Collections.synchronizedMap(new HashMap());
18     }
19 }

设置不可变(只读)集合

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

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

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

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

用法如下,

 1 package collection.collections;2 3 import java.util.Collection;4 import java.util.Collections;5 import java.util.HashMap;6 import java.util.List;7 import java.util.Map;8 import java.util.Set;9
10 public class UnmodifiableCollection {
11     public static void main(String[] args) {
12         List lt = Collections.emptyList();
13         Set st = Collections.singleton("avs");
14
15         Map mp = new HashMap();
16         mp.put("a",100);
17         mp.put("b", 200);
18         mp.put("c",150);
19         Map readOnlyMap = Collections.unmodifiableMap(mp);
20
21         //下面会报错
22         lt.add(100);
23         st.add("sdf");
24         mp.put("d", 300);
25     }
26 }

执行结果,

1 Exception in thread "main" java.lang.UnsupportedOperationException
2     at java.util.AbstractList.add(Unknown Source)
3     at java.util.AbstractList.add(Unknown Source)
4     at collection.collections.UnmodifiableCollection.main(UnmodifiableCollection.java:22

JAVA基础知识之Collections工具类相关推荐

  1. Java集合框架:Collections工具类

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  2. Java基础教程:JavaArrays工具类

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念.Java不但可以用来开发网站后台.PC客户端和AndroidAPP,还在数据分析.网络爬虫 ...

  3. Java基础知识学习04-自定义类、ArrayList集合

    类与对象 类是一个模子,确定对象将会拥有的特征(属性)和行为(方法). 类的特征:类是对象的类型 具有相同属性和方法的一组对象的集合 类的组成:属性和方法 定义一个类:public class  类名 ...

  4. [Java基础] 2个Pair工具类比较

    前言 之前再开发过程中, 发现有2个Pair类, 2个Pair类之间还是有一些差别和联系的, 将考究内容记录于此. PS: 后续, 我们可以探究下Tuplate 三元组和多元组. Pair类解析 ja ...

  5. java基础知识回顾之javaIO类总结

    java IO体系图 IO流的操作规律总结: 1,明确体系: 数据源:InputStream ,Reader 数据汇:OutputStream,Writer 2,明确数据:因为数据分两种:字节,字符. ...

  6. java基础知识回顾之javaIO类---FileInputStream和FileOutputStream字节流复制图片

    package com.lp.ecjtu;import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  7. Java八股文一:java基础知识

    文章目录 一.Java 基础知识 1.Object 类相关方法 2.基本数据类型 3.序列化 4.String.StringBuffer.StringBuilder 5.重载与重写 6.final 7 ...

  8. java 中间容器 表格_【JAVA SE基础篇】45.迭代器、Collections工具类以及使用容器存储表格...

    本文将要为您介绍的是[JAVA SE基础篇]45.迭代器.Collections工具类以及使用容器存储表格,具体完成步骤: 1.迭代器 迭代器为我们提供了统一遍历容器(List/Map/Set)的方式 ...

  9. 菜鸟学习笔记:Java提升篇4(容器4——Collections工具类、其他容器)

    菜鸟学习笔记:Java容器4--Collections工具类.其他容器 Collections工具类 容器其他知识点 队列Queue Enumeration接口 Hashtable Propertie ...

最新文章

  1. 【Structs2】struts2单例多例以及spring整合的问题
  2. Python单元测试之pytest
  3. 【机器学习】线性回归之Normal Equation(矩阵求导与线性代数视角)
  4. jmeter学习笔记(八-1)
  5. C++中virtual关键字的用法
  6. pycharm的使用技巧
  7. java 排水管网 系统_排水管网数字化管理系统
  8. 会员卡管理系统从哪些方面解决门店会员营销困扰?
  9. PCB叠层排布原则以及AD中如何设计叠层
  10. 运维分级发布_故障分级和处罚规范-运维必备规章制度
  11. python咋念_python怎么念
  12. Excel利用公式向导不会函数也可去掉文本2端空格
  13. android版手机qq 5.0,手机QQ5.0安卓版今日正式发布 手机QQ5.0更新升级内容介绍
  14. 苹果退款_苹果 App Store 里自动订阅续费的应用可以退款吗?
  15. 计算机专业硕士毕业论文摘要,湖北计算机专业硕士毕业论文英文摘要,经济学专业本科毕业论文...
  16. php去除换行(回车换行)的方法
  17. java内存映射读取管道文件
  18. 服务器储存要注意什么
  19. 4G物联网设备使用经验--深刻的教训
  20. 数据结构——线性表(三)

热门文章

  1. AtCoder Grand Contest 019
  2. (原)python爬虫入门(2)---排序爬取的辽宁科技大学热点新闻
  3. linux命令 screen的简单使用
  4. Asp.net中Mysql存储中文乱码解决方法
  5. Bailian3717 移动路线【组合】
  6. CodeForces - 798B Mike and strings
  7. Bailian2965 玛雅历【日期计算】
  8. POJ3750 小孩报数问题【模拟】
  9. POJ1142 HDU1333 ZOJ1133 Smith Numbers【质因数分解+素数判定+数位之和】
  10. C语言实现的RSA算法程序(使用GMP)