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 后:[沉默王九, 沉默王十, 沉默王二]
是否没有交集:否
相关推荐
2201_757830872 小时前
全局异常处理器
java
知远同学3 小时前
Anaconda的安装使用(为python管理虚拟环境)
开发语言·python
小徐Chao努力3 小时前
【Langchain4j-Java AI开发】09-Agent智能体工作流
java·开发语言·人工智能
CoderCodingNo3 小时前
【GESP】C++五级真题(贪心和剪枝思想) luogu-B3930 [GESP202312 五级] 烹饪问题
开发语言·c++·剪枝
Coder_Boy_4 小时前
SpringAI与LangChain4j的智能应用-(理论篇3)
java·人工智能·spring boot·langchain
kylezhao20194 小时前
第1章:第一节 开发环境搭建(工控场景最优配置)
开发语言·c#
啃火龙果的兔子4 小时前
JavaScript 中的 Symbol 特性详解
开发语言·javascript·ecmascript
Coder_Boy_4 小时前
基于SpringAI的智能平台基座开发-(六)
java·数据库·人工智能·spring·langchain·langchain4j
热爱专研AI的学妹4 小时前
数眼搜索API与博查技术特性深度对比:实时性与数据完整性的核心差异
大数据·开发语言·数据库·人工智能·python
Mr_Chenph4 小时前
Miniconda3在Windows11上和本地Python共生
开发语言·python·miniconda3