1. Collections-sort
public static <T extends Comparable<? super T>> void sort(List<T> list)
:根据元素的自然顺序对指定列表按升序排序public static <T> void sort(List<T> list, Comparator<? super T> c)
:根据指定的比较器引起的顺序对指定的列表进行排序。
给字符串排序: 直接使用Collections.sort()
package Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsDemo {
public static void main(String[] args) {
sortDemo();
}
public static void sortDemo(){
List<String> list = new ArrayList<>();
list.add("abcd");
list.add("aaa");
list.add("z");
list.add("kkkkkk");
list.add("qqqqq");
list.add("z");
sop(list);
Collections.sort(list);
sop(list);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
结果:
[abcd, aaa, z, kkkkkk, qqqqq, z]
[aaa, abcd, kkkkkk, qqqqq, z, z]
按照字符串长度排序: 使用Collections.sort(list, Comparator)
package Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsDemo {
public static void main(String[] args) {
sortDemo();
}
public static void sortDemo(){
List<String> list = new ArrayList<>();
list.add("abcd");
list.add("aaa");
list.add("z");
list.add("kkkkkk");
list.add("qqqqq");
list.add("z");
sop(list);
Collections.sort(list, new StrLenComparator());
sop(list);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
// 字符串长度比较器
class StrLenComparator implements Comparator<String>{
public int compare(String s1, String s2){
return s1.length()-s2.length();
}
}
结果:
[abcd, aaa, z, kkkkkk, qqqqq, z]
[z, z, aaa, abcd, qqqqq, kkkkkk]
2. Collections-max
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
:根据其元素的自然顺序返回给定集合的最大元素public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp)
:根据指定的比较器引发的顺序返回给定集合的最大元素
package Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsDemo {
public static void main(String[] args) {
maxDemo();
}
public static void maxDemo(){
List<String> list = new ArrayList<>();
list.add("abcd");
list.add("aaa");
list.add("z");
list.add("kkkkkk");
list.add("qqqqq");
list.add("z");
sop("___________初始__________");
sop(list);
sop("__________按字符串排序_________");
Collections.sort(list);
sop(list);
sop("__________字符串最大值_________");
sop(Collections.max(list));
sop("_________按字符串长度排序________");
Collections.sort(list,new StrLenComparator());
sop(list);
sop("_________字符串长度最大值________");
sop(Collections.max(list,new StrLenComparator()));
}
public static void sop(Object obj){
System.out.println(obj);
}
}
// 字符串长度比较器
class StrLenComparator implements Comparator<String>{
public int compare(String s1, String s2){
return s1.length()-s2.length();
}
}
结果:
___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________按字符串排序_________
[aaa, abcd, kkkkkk, qqqqq, z, z]
__________字符串最大值_________
z
_________按字符串长度排序________
[z, z, aaa, abcd, qqqqq, kkkkkk]
_________字符串长度最大值________
kkkkkk
3. Collections-binarySearch
binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要,binarySearch()有两种参数类型
注:此法为二分搜索法,故查询前需要用sort()方法将数组排序,如果数组没有排序,则结果是不确定的,另外如果数组中含有多个指定值的元素,则无法保证找到的是哪一个。
第一种 :public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
:如果key在数组中,则返回搜索值的索引;否则返回-1或者”-“(插入点)。插入点是索引键将要插入数组的那一点,即第一个大于该键的元素索引。1.不存在时由1开始计数; 2.存在时由0开始计数。
package Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsDemo {
public static void main(String[] args) {
binarySearchDemo();
}
public static void binarySearchDemo(){
List<String> list = new ArrayList<>();
list.add("abcd");
list.add("aaa");
list.add("z");
list.add("kkkkkk");
list.add("qqqqq");
list.add("z");
sop("___________初始__________");
sop(list);
sop("__________按字符串排序_________");
Collections.sort(list);
sop(list);
sop("__________binarySearch_________");
int index = Collections.binarySearch(list,"qqqqq");
sop(index);
int index = Collections.binarySearch(list,"a");
sop(index);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
计算结果:
___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________按字符串排序_________
[aaa, abcd, kkkkkk, qqqqq, z, z]
__________binarySearch_________
3
-1
第二种 :public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)
:使用二叉搜索算法搜索指定对象的指定列表。同时比较的方法也应该带比较器(如sort(List, Comparator)方法)。
package Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsDemo {
public static void main(String[] args) {
binarySearchDemo();
}
public static void binarySearchDemo(){
List<String> list = new ArrayList<>();
list.add("abcd");
list.add("aaa");
list.add("z");
list.add("kkkkkk");
list.add("qqqqq");
list.add("z");
sop("___________初始__________");
sop(list);
sop("__________按字符串长度排序_________");
Comparator comparator = new StrLenComparator();
Collections.sort(list,comparator);
sop(list);
sop("__________binarySearch_________");
int index = Collections.binarySearch(list,"qqqqq",comparator);
sop(index);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
// 字符串长度比较器
class StrLenComparator implements Comparator<String>{
public int compare(String s1, String s2){
return s1.length()-s2.length();
}
}
结果:
___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________按字符串长度排序_________
[z, z, aaa, abcd, qqqqq, kkkkkk]
__________binarySearch_________
4
4. Collections-替换反转
fill()
public static <T> void fill(List<? super T> list, T obj)
:用指定的元素代替指定列表的所有元素。
package Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsDemo {
public static void main(String[] args) {
fillDemo();
}
public static void fillDemo(){
List<String> list = new ArrayList<>();
list.add("abcd");
list.add("aaa");
list.add("z");
list.add("kkkkkk");
list.add("qqqqq");
list.add("z");
sop("___________初始__________");
sop(list);
sop("__________替换之后_________");
Collections.fill(list,"pp");
sop(list);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
结果:
___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________替换之后_________
[pp, pp, pp, pp, pp, pp]
练习: fill()方法可以将list集合中所有元素替换成指定元素,那如何将list集合中部分元素替换成指定元素呢?
使用list.subList(int start, int end);
package Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsDemo {
public static void main(String[] args) {
fillDemo();
}
public static void fillDemo(){
List<String> list = new ArrayList<>();
list.add("abcd");
list.add("aaa");
list.add("z");
list.add("kkkkkk");
list.add("qqqqq");
list.add("z");
sop("___________初始__________");
sop(list);
sop("__________替换部分元素_________");
Collections.fill(list.subList(1,3),"pp");
sop(list);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
结果输出:
___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________替换部分元素_________
[abcd, pp, pp, kkkkkk, qqqqq, z]
replaceAll()
public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal)
:将列表中一个指定值的所有出现替换为另一个
package Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsDemo {
public static void main(String[] args) {
replaceAllDemo();
}
public static void replaceAllDemo(){
List<String> list = new ArrayList<>();
list.add("abcd");
list.add("aaa");
list.add("z");
list.add("kkkkkk");
list.add("qqqqq");
list.add("z");
sop("___________初始__________");
sop(list);
sop("__________repalceAll_________");
Collections.replaceAll(list.subList(1,3),"z","shhhhh");
sop(list);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
结果:
___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________repalceAll_________
[abcd, aaa, shhhhh, kkkkkk, qqqqq, z]
reverse()
public static void reverse(List<?> list)
:反转指定列表中元素的顺序。
package Collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CollectionsDemo {
public static void main(String[] args) {
reverseDemo();
}
public static void reverseDemo(){
List<String> list = new ArrayList<>();
list.add("abcd");
list.add("aaa");
list.add("z");
list.add("kkkkkk");
list.add("qqqqq");
list.add("z");
sop("___________初始__________");
sop(list);
sop("__________reverse_________");
Collections.reverse(list);
sop(list);
}
public static void sop(Object obj){
System.out.println(obj);
}
}
结果:
___________初始__________
[abcd, aaa, z, kkkkkk, qqqqq, z]
__________reverse_________
[z, qqqqq, kkkkkk, z, aaa, abcd]