Java集合框架:Collections工具类
java.util.Collections工具类提供非常多实用的方法。使得程序员操作集合类的时候更加的方便easy,这些方法都是静态的。
整个Collections工具类源代码几乎相同有4000行。我们针对一些典型的方法进行阐述。
1. 调用一个空List,Set,Map
public static final List EMPTY_LIST = new EmptyList<>();
public static final Map EMPTY_MAP = new EmptyMap<>();
public static final Set EMPTY_SET = new EmptySet<>();
2. addAll
public static <T> boolean addAll(Collection<?
super T> c, T… elements):向指定的集合c中增加特定的一些元素elements
案例2-1:
List<String> list = new ArrayList<>();
list.add("s2");
list.add("s4");
list.add("s1");
list.add("s3");
System.out.println(list);
Collections.addAll(list, "s5","s7",null,"s9");
System.out.println(list);
执行结果:
[s2, s4, s1, s3]
[s2, s4, s1, s3, s5, s7, null, s9]
3. binarySearch
public static <T> int binarySearch(List<?
extends Comparable<?
super T>> list, T key)
public static <T> int binarySearch(List<?
extends T> list, T key, Comparator<? super T> c)
利用二分法在指定的集合中查找元素,至于Comparable以及Comparator相信看过前面一些列博文的朋友应该非常清楚了。详细的也能够參考《Comparable与Comparator浅析》
4. sort
public static <T extends Comparable<? super T>> void sort(List<T> list) 须要泛型T类本身支持Comparable接口
public static <T> void sort(List<T> list, Comparator<? super T> c)
详细举例能够參考《Comparable与Comparator浅析》
5. shuffle
public static void shuffle(List<?> list)
public static void shuffle(List<?
> list, Random rnd)
混排。混排算法所做的正好与sort相反:它打乱在一个List中可能有的不论什么排列的踪迹。也就是说,基于随机源的输入重排list,这种排列具有同样的可能性(假设随机源是公正的)。这个算法在实现一个碰运气的Game中非常实用。
案例5-1:
public static void test3()
{
List<String> list = new ArrayList<>();
list.add("s1");
list.add("s2");
list.add("s3");
list.add("s4");
Collections.shuffle(list);
System.out.println(list);
}
每次执行结果都不同。
6. 反转
有关反转主要有这三个方法:
- public static void reverse(List<?
> list)直接反转集合的元素
- public static <T> Comparator<T> reverseOrder();返回能够使集合反转的比較器Comparator
- public static <T> Comparator<T> reverseOrder(Comparator<T> cmp)。假设cmp不为null,返回cmp的反转的比較器。即集合的反转的反转,最后就是没反转。假设cmp为null,效果等同于第二个方法.
举几个案例来说明下使用方法。
案例6-1:
List<String> list = new ArrayList<>();
list.add("s1");
list.add("s2");
list.add("s3");
list.add("s4");
System.out.println(list);
Collections.reverse(list);
System.out.println(list);
执行结果:
[s1, s2, s3, s4]
[s4, s3, s2, s1]
案例6-2:
List<String> list = new ArrayList<>();
list.add("s1");
list.add("s2");
list.add("s3");
System.out.println(list);
Comparator<String> comp = Collections.reverseOrder();
Collections.sort(list,comp);
System.out.println(list);
执行结果:(同上)
案例6-3:
List<String> list = new ArrayList<>();
list.add("s1");
list.add("s2");
list.add("s3");
list.add("s4");
System.out.println(list);
Comparator<String> comp = Collections.reverseOrder();
Collections.sort(list,comp);
System.out.println(list);
Comparator<String> comp2 = Collections.reverseOrder(comp);
Collections.sort(list,comp2);
System.out.println(list);
执行结果:
[s1, s2, s3, s4]
[s4, s3, s2, s1]
[s1, s2, s3, s4]
假设把Comparator<String> comp2 = Collections.reverseOrder(comp);改成Comparator<String> comp2 = Collections.reverseOrder(null);执行结果:
[s1, s2, s3, s4]
[s4, s3, s2, s1]
[s4, s3, s2, s1]
7.synchronized系列
确保所封装的集合线程安全(强同步)
- public static <T> Collection<T> synchronizedCollection(Collection<T> c)
- public static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s)
- public static <T> List<T> synchronizedList(List<T> list)
- public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
- public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m)
- public static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s)
8. unmodifiable系列
确保所封装的集合不能改动。
- public static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c)
- public static <T> Set<T> unmodifiableSet(Set<? extends T> s)
- public static <T> SortedSet<T> unmodifiableSortedSet(SortedSet<T> s)
- public static <T> List<T> unmodifiableList(List<? extends T> list)
- public static <K,V> Map<K,V> unmodifiableMap(Map<? extends K, ? extends V> m)
- public static <K,V> SortedMap<K,V> unmodifiableSortedMap(SortedMap<K, ?
extends V> m)
9.其它
Collections工具类的功能不止上面这些,还有诸如fill(), rotate(), max(), min()等方法。不可能一下子就能所有记住,使用的时候多查查API就可以。
參考资料:
1. 《Comparable与Comparator浅析》
Java集合框架:Collections工具类的更多相关文章
- 【JAVA集合框架之工具类】
一.概述 JAVA集合框架中有两个很重要的工具类,一个是Collections,另一个是Arrays.分别封装了对集合的操作方法和对数组的操作方法,这些操作方法使得程序员的开发更加高效. public ...
- Java:集合框架的工具类
集合框架的工具类 Arrays:里面都是静态方法,直接用来对各种集合进行操作的公有方法. Collections:里面都是静态方法,直接用来对各种集合进行操作的公有方法. 包括: 1.asList将数 ...
- Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法
Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...
- Java最重要的21个技术点和知识点之JAVA集合框架、异常类、IO
(三)Java最重要的21个技术点和知识点之JAVA集合框架.异常类.IO 写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享 ...
- Java集合框架(常用类) JCF
Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...
- Java:集合,Collections工具类用法
Collections工具类提供了大量针对Collection/Map的操作,总体可分为四类,都为静态(static)方法: 1. 排序操作(主要针对List接口相关) reverse(List li ...
- java集合框架(Collections Framework)
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Java—集合框架 Collections.sort()、Comparable接口和Comparator接口
Collentions工具类--java.util.Collections Collentions是Java集合框架中,用来操作集合对象的工具类,也是Java集合框架的成员,与List.Map和Set ...
- Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌
1.Map集合概述和特点 * A:Map接口概述 * 查看API可以知道: * 将键映射到值的对象 * 一个映射不能包含重复的键 * 每个键最多 ...
- Java容器---Arrays & Collections工具类
1.Array & Arrays 与Collection & Collections区别 (1)Collection": 是一个接口,与其子类共同组成一个Collection ...
随机推荐
- Redis 数据结构之简单动态字符串SDS
几个概念1:key对象 数据库存储键值对的键,总是一个字符串对象.2:value对象 数据库存储键值对的值,可以是字符串对象,list对象,hash对象,set对象,sorted set对象. ...
- 学 Vim 时希望早点知道的建议
来自wechat 从 2009 年开始,我就一直把 Vim 当做我的主要(唯一)文本编辑器.在过去的这些年,我学到了很多好用的 Vim 技巧,它们令我感觉相见恨晚,因为它们极大地提高了我的文本编辑效率 ...
- Odoo8.0安装wkhtmltopdf报表运行环境
#下载 #注意根据操作系统选择相应版本 (旧地址)wget http://sourceforge.net/projects/wkhtmltopdf/files/0.12.1/wkhtmltox ...
- springmvc使用实体參数和ServletAPI
一. 实体參数 前面我们知道使用注解@RequestParam能够获得參数的值,那么如今提交一个表单怎么获得当中的值了.你能够说能够使用request.getParameter("" ...
- 关于ie,火狐,谷歌浏览器滚动条的隐藏以及自定义样式
最近做了一个项目,要求各个浏览器统一滚动条的样式,不显示滚动条,但是不影响鼠标的滑动事件. 查了很多资料,ie和谷歌都是可以自定义滚动条样式的,但是ie只能改变颜色,并不能修改宽度,圆角之类的.谷歌就 ...
- NoReverseMatch at /salesman/zhuce/ Reverse for '/zhuce/' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
NoReverseMatch at /salesman/zhuce/ Reverse for '/zhuce/' with arguments '()' and keyword arguments ' ...
- php里面的编码问题
1 获取当前字符串的编码 $encode = mb_detect_encoding($str, array("ASCII",'UTF-8',"GB2312",& ...
- unity, Global和Local编辑模式
下图表示是在Local模式下: 下图表示是在Global模式下: 不要搞反.
- container_of学习笔记
最近在学习c语言宏编程,看到了container_of宏,深入学习了一天,做个笔记留念. 1.看一下书上写的container_of的版本: #define offsetof(TYPE,MEMBER) ...
- thinkphp验证码出不来
import("ORG.Util.Image"); //图像操作类库 ob_end_clean(); $type = isset($_GET['type'])?$_GET['typ ...