【Java】集合_Collections_学习记录
一、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_学习记录的更多相关文章
- Java集合框架学习(一)List
先附一张Java集合框架图. 从上面的集合框架图可以看到,Java集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Coll ...
- java 项目相关 学习记录
一位资深程序员大牛给予Java初学者的学习路线建议 [任何时期都可以好好看看] https://www.imooc.com/article/8993 https://www.jianshu.com/ ...
- java集合的学习笔记
不知不觉也到了java集合这一章的学习,这因该是挺重要的一个章节,因为所有的程序都离不开数据,而一个良好的数据结构和算法应该是程序的灵魂吧. 今天对自己所初步了解的做一个总结: 数据结构是计算机存储. ...
- Java集合框架学习
集合框架 集合框架的目标 该框架必须是高性能的.基本集合(动态数组,链表,树,哈希表)的实现必须是高效的. 该框架允许 不同类型的集合,以类似的方式工作,具有高度的互操作性. 对一个集合的扩展和适应必 ...
- Java集合框架学习总结
转自:http://www.cnblogs.com/oubo/archive/2012/01/07/2394639.html Oubo的博客 以下介绍经常使用的集合类,这里不介绍集合类的使用方法,只介 ...
- 转:java高并发学习记录-死锁,活锁,饥饿
死锁 两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 为什么会产生死锁: ① 因为系统资源不足. ② 进程运行推进的顺序不合适. ③ ...
- 【java基础 11】java集合框架学习
导读:本篇博客主要是从整体上了解java的集合框架,然后主要介绍几个自己在项目中用到的结构,比如说:hashtable.hashmap.hashset.arraylist等! 一.宏观预览 从宏观上看 ...
- Java集合框架学习笔记
集合类的由来:对象用于封装特有数据,对象多了需要存储,如果对象的长度不确定,就使用集合存储. 集合特点1.用于存储对象的容器.2.集合的长度可变.3.集合中不可以存储基本类型 集合容器因为内部的数据结 ...
- JAVA 动态代理学习记录
打算用JAVA实现一个简单的RPC框架,看完RPC参考代码之后,感觉RPC的实现主要用到了两个方面的JAVA知识:网络通信和动态代理.因此,先补补动态代理的知识.---多看看代码中写的注释 参考:Ja ...
随机推荐
- Qt中使用信号和槽的一点心得
信号(Signal)与槽(Slot)-Qt中的典型机制 这一篇文章中都说得很详细了,这里不再重复,只说一点在实际使用中可能会遇到的问题. 1.一个信号不要同时连接几个槽函数,不然执行的顺序是随机的,最 ...
- ffmpeg与RTMP流媒体连接用法(翻译) http://www.chinavideo.org/forum.php?mod=viewthread&tid=15423
最近浏览国外网站时候发现,翻译不准确的敬请谅解. 1.将文件当做直播送至liveffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/liv ...
- Apache 支持.htaccess
******************************************************************************* Apache 服务器 ********* ...
- 运用预加载提升H5移动页面的用户体验
原文地址:http://www.grycheng.com/?p=2188 在做h5移动页面,相信大家一定碰到过页面已经打开,但是里面的图片还未加载出来的情况,这种问题虽然不影响页面的功能,但是不利于用 ...
- SQL Server与Oracle中的隔离级别
在SQL92标准中,事务隔离级别分为四种,分别为:Read Uncommitted.Read Committed.Read Repeatable.Serializable 其中Read Uncommi ...
- WebApi(二)-重新封装返回结果
先创建要返回的结果类型: /// <summary> /// 返回类型 /// </summary> public class ApiResultModel { private ...
- 在HTML页面布局中,position的值有几种,默然的值是什么
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- spoj 3885
简单的博弈题,用dp解: 每个人只能拿1,l,k个硬币: dp[i][j]表示第j个人拿是否能拿第i枚硬币: 代码: #include<cstdio> #define maxn 10000 ...
- 【Java】整理关于java的String类,equals函数和比较操作符的区别
初学 Java 有段时间了,感觉似乎开始入了门,有了点儿感觉但是发现很多困惑和疑问而且均来自于最基础的知识折腾了一阵子又查了查书,终于对 String 这个特殊的对象有了点感悟大家先来看看一段奇怪的程 ...
- 14.8.1 Creating InnoDB Tables 创建InnoDB 表
14.8.1 Creating InnoDB Tables 创建InnoDB 表 创建一个InnoDB表,使用CREATE TABLE 语句,你不需要指定ENGINE=InnoDB 子句 如果Inno ...