Collections工具类

Java中的二进制操作
进制转换

java 复制代码
// 十进制转换为二进制
String binaryString = Integer.toBinaryString(10);
// 输出二进制字符串
System.out.println(binaryString); // 输出 "1010"
// 二进制转换为十进制
int decimal = Integer.valueOf("1010", 2);
// 输出十进制数值
System.out.println(decimal); // 输出 10

位运算

// 按位与运算

int resultAnd = 51 & 5; // 结果为 1

// 按位或运算

int resultOr = 51 | 5; // 结果为 55

// 异或运算

int resultXor = 51 ^ 5; // 结果为 54

// 取反运算

int resultNot = ~5; // 结果为 -6

// 左移运算

int resultLeftShift = 5 << 1; // 结果为 10

// 右移运算

int resultRightShift = 5 >> 1; // 结果为 2

八进制和十六进制

java 复制代码
八进制:使用Integer.toOctalString(int n)方法,它会返回一个八进制字符串。

十六进制:使用Integer.toHexString
  1. 排序操作
java 复制代码
List<String> list = new ArrayList<>();
list.add("沉默王二");
list.add("沉默王三");
list.add("沉默王四");
list.add("沉默王五");
list.add("沉默王六");

System.out.println("原始顺序:" + list);

// 反转
Collections.reverse(list);
System.out.println("反转后:" + list);

// 洗牌
Collections.shuffle(list);
System.out.println("洗牌后:" + list);

// 自然升序
Collections.sort(list);
System.out.println("自然升序后:" + list);

// 交换
Collections.swap(list, 2,4);
System.out.println("交换后:" + list);

输出是:

java 复制代码
原始顺序:[沉默王二, 沉默王三, 沉默王四, 沉默王五, 沉默王六]
反转后:[沉默王六, 沉默王五, 沉默王四, 沉默王三, 沉默王二]
洗牌后:[沉默王五, 沉默王二, 沉默王六, 沉默王三, 沉默王四]
自然升序后:[沉默王三, 沉默王二, 沉默王五, 沉默王六, 沉默王四]
交换后:[沉默王三, 沉默王二, 沉默王四, 沉默王六, 沉默王五]
  1. 查找操作
    binarySearch(List list, Object key):二分查找法,前提是 List 已经排序过了
    max(Collection coll):返回最大元素
    max(Collection coll, Comparator comp):根据自定义比较器,返回最大元素
    min(Collection coll):返回最小元素
    min(Collection coll, Comparator comp):根据自定义比较器,返回最小元素
    fill(List list, Object obj):使用指定对象填充
    frequency(Collection c, Object o):返回指定对象出现的次数
java 复制代码
System.out.println("最大元素:" + Collections.max(list));
System.out.println("最小元素:" + Collections.min(list));
System.out.println("出现的次数:" + Collections.frequency(list, "沉默王二"));

// 没有排序直接调用二分查找,结果是不确定的
System.out.println("排序前的二分查找结果:" + Collections.binarySearch(list, "沉默王二"));
Collections.sort(list);
// 排序后,查找结果和预期一致
System.out.println("排序后的二分查找结果:" + Collections.binarySearch(list, "沉默王二"));

Collections.fill(list, "沉默王八");
System.out.println("填充后的结果:" + list);
java 复制代码
原始顺序:[沉默王二, 沉默王三, 沉默王四, 沉默王五, 沉默王六]
最大元素:沉默王四
最小元素:沉默王三
出现的次数:1
排序前的二分查找结果:0
排序后的二分查找结果:1
填充后的结果:[沉默王八, 沉默王八, 沉默王八, 沉默王八, 沉默王八]
  1. 同步控制
    HashMap 是线程不安全的,这个我们前面讲到了。那其实 ArrayList 也是线程不安全的,没法在多线程环境下使用,那 Collections 工具类中提供了多个 synchronizedXxx 方法,这些方法会返回一个同步的对象,从而解决多线程中访问集合时的安全问题
java 复制代码
SynchronizedList synchronizedList = Collections.synchronizedList(list);
  1. 不可变集合
    emptyXxx():制造一个空的不可变集合
    singletonXxx():制造一个只有一个元素的不可变集合
    unmodifiableXxx():为指定集合制作一个不可变集合
java 复制代码
List emptyList = Collections.emptyList();
emptyList.add("非空");
System.out.println(emptyList);

这段代码在执行的时候就抛出错误

java 复制代码
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.itwanger.s64.Demo.main(Demo.java:61)

还有两个方法比较常用:

addAll(Collection<? super T> c, T... elements),往集合中添加元素 disjoint(Collection<?> c1, Collection<?> c2),判断两个集合是否没有交集

java 复制代码
List<String> allList = new ArrayList<>();
Collections.addAll(allList, "沉默王九","沉默王十","沉默王二");
System.out.println("addAll 后:" + allList);

System.out.println("是否没有交集:" + (Collections.disjoint(list, allList) ? "是" : "否"));
输出:
原始顺序:[沉默王二, 沉默王三, 沉默王四, 沉默王五, 沉默王六]
addAll 后:[沉默王九, 沉默王十, 沉默王二]
是否没有交集:否
相关推荐
Halo_tjn3 分钟前
Java Set集合相关知识点
java·开发语言·算法
Linsk8 分钟前
Java和JavaScript的关系真是雷峰和雷峰塔的关系吗?
java·javascript·oracle
许彰午21 分钟前
我手写了一个 Java 内存数据库(二):B+ 树的插入与分裂
java·开发语言·面试
zhouwy11322 分钟前
Java 快速入门笔记:从基础语法到 Spring Boot 实战
java
大飞记Python36 分钟前
【2026更新】Python基础学习指南(AI版)——04数据类型
开发语言·人工智能·python
极创信息1 小时前
信创产品认证怎么做?信创产品测试认证的主要流程
java·大数据·数据库·金融·软件工程
SamDeepThinking1 小时前
并发量就算只有2,该上锁还得上呀
java·后端·架构
Alice-YUE1 小时前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript
Sam_Deep_Thinking1 小时前
如何让订单系统和营销系统解耦
java·架构·系统架构
云泽8081 小时前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++