原文网址:Java--Collections--使用/常用方法/实例_IT利刃出鞘的博客-CSDN博客
简介本文用示例介绍Java中的Objects的用法。
Java中的Collections是操作对象的工具类,有如下功能:排序、同步控制、生成不可变集合等。
排序(主要针对List接口相关)
| 方法 | 说明 |
| reverse(List list) | 反转指定List集合中元素的顺序 |
| shuffle(List list) | 对List中的元素进行随机排序(洗牌) |
| sort(List list) | 对List里的元素根据自然升序排序 |
| sort(List list, Comparator c) | 自定义比较器进行排序 |
| swap(List list, int i, int j) | 将指定List集合中i处元素和j出元素进行交换 |
| rotate(List list, int distance) | 将所有元素向右移位指定长度。若distance等于size那么结果不变 |
实例
package org.example.a;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Demo {
public static void main(String[] args) {
List list = Arrays.asList("a", "b", "c", "d", "e");
System.out.println("原始顺序:tt" + list);
list = Arrays.asList("a", "b", "c", "d", "e");
Collections.reverse(list);
System.out.println("reverse后顺序:t" + list);
list = Arrays.asList("a", "b", "c", "d", "e");
Collections.shuffle(list);
System.out.println("shuffle后顺序:t" + list);
list = Arrays.asList("a", "b", "c", "d", "e");
Collections.swap(list, 1, 3);
System.out.println("swap后顺序:t" + list);
list = Arrays.asList("a", "b", "c", "d", "e");
Collections.sort(list);
System.out.println("sort后顺序:t" + list);
list = Arrays.asList("a", "b", "c", "d", "e");
Collections.rotate(list, 1);
System.out.println("rotate后顺序:t" + list);
}
}
执行结果
原始顺序: [a, b, c, d, e] reverse后顺序: [e, d, c, b, a] shuffle后顺序: [b, e, a, c, d] swap后顺序: [a, d, c, b, e] sort后顺序: [a, b, c, d, e] rotate后顺序: [e, a, b, c, d]查找/替换
(主要针对Collection接口相关)
| 方法 | 说明 |
| 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 Object o) | 返回指定集合中指定对象出现的次数 |
| replaceAll(List list, Object old, Object new) | 替换 |
实例
package org.example.a;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Demo {
public static void main(String[] args) {
List list = Arrays.asList("a", "b", "c", "d", "e");
System.out.println("原始list:" + list);
System.out.println("max:" + Collections.max(list));
System.out.println("min:" + Collections.min(list));
System.out.println("frequency:" + Collections.frequency(list, "a"));
Collections.replaceAll(list, "a", "aa");
System.out.println("replaceAll之后:" + list);
// 如果binarySearch的对象没有排序的话,搜索结果是不确定的
Collections.shuffle(list);
System.out.println("sort之前:" + Collections.binarySearch(list, "c"));
// sort之后,结果出来了
Collections.sort(list);
System.out.println("sort之后:" + Collections.binarySearch(list, "c"));
Collections.fill(list, "A");
System.out.println("fill:" + list);
}
}
执行结果
原始list:[a, b, c, d, e] max:e min:a frequency:1 replaceAll之后:[aa, b, c, d, e] sort之前:-1 sort之后:2 fill:[A, A, A, A, A]同步控制
简介
Collections工具类中提供了多个synchronizedXxx方法,该方法返回指定集合对象对应的同步对象,从而解决多线程并发访问集合时线程的安全问题。HashSet、ArrayList、HashMap都是线程不安全的,如果需要考虑同步,则使用这些方法。这些方法主要有:synchronizedSet、synchronizedSortedSet、synchronizedList、synchronizedMap、synchronizedSortedMap。
特别需要指出的是,在使用迭代方法遍历集合时需要手工同步返回的集合。
Map m = Collections.synchronizedMap(new HashMap());
...
Set s = m.keySet(); // Needn't be in synchronized block
...
synchronized (m) { // Synchronizing on m, not s
Iterator i = s.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
不可变集合
| 方法 | 说明 |
| emptyXxx() 或EMPTY_XXX 或EmptyXxx() | 返回一个空的不可变的集合对象。 只读的空LIST 集合:Collections.EMPTY_LIST,Collections.emptyList(),new EmptyList(); 只读的空Set 集合: Collections.EMPTY_SET,Collections.emptySet(), new EmptySet(); 只读的空MAP集合: Collections.EMPTY_MAP,Collections.emptyMap(), new EmptyMap(); |
| singletonXxx() | 返回一个只包含指定对象的,不可变的集合对象 |
| unmodifiableXxx() | 返回指定集合对象的不可变视图 |
实例
package org.example.a;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Demo {
public static void main(String[] args) {
List list = Arrays.asList("a", "b", "c", "d", "e");
System.out.println("list:" + list);
List unmodList = Collections.unmodifiableList(list);
unmodList.add("fg");
System.out.println("unmodiList:" + unmodList);
}
}
执行结果
list:[a, b, c, d, e] Exception in thread "main" java.lang.UnsupportedOperationException at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055) at org.example.a.Demo.main(Demo.java:12)其他
| 方法 | 说明 |
| disjoint(Collection> c1, Collection> c2) | 如果两个指定 collection 中没有相同的元素,则返回 true。 |
| addAll(Collection super T> c, T... a) | 将所有指定元素添加到指定 collection 中。示范: Collections.addAll(flavors, "Peaches 'n Plutonium", "Rocky Racoon"); |
| Comparator | 返回一个比较器,它强行反转指定比较器的顺序。如果指定比较器为 null,则此方法等同于 reverseOrder()(换句话说,它返回一个比较器,该比较器将强行反转实现 Comparable 接口那些对象 collection 上的自然顺序)。 |
实例
package org.example.a;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Demo {
public static void main(String[] args) {
List list = Arrays.asList("a", "b", "c", "d", "e");
List list1 = new ArrayList<>();
List list2 = new ArrayList<>();
Collections.addAll(list1, "fg", "hi");
Collections.addAll(list2, "e", "hi");
System.out.println(Collections.disjoint(list, list1));
System.out.println(Collections.disjoint(list, list2));
Collections.sort(list, Collections.reverseOrder());
System.out.println(list);
}
}
执行结果
true false [e, d, c, b, a]其他网址
java中Collections常用方法总结(包括sort,copy,reverse等)_Shiny0815的博客-CSDN博客



