Collections作为集合的工具类,提供了哪些比较好的方法?
下面一一进行介绍
(一). 排序方法
1)sort(List list)按照自然顺序排序
2)sort(List list , Comparator)按照指定比较器排序
3)可以对相同元素进行排序,因为序列号不一样。
4)此方法只限定用于List集合,而不用于Set集合,因为Set有TreeSet可以排序
示例1:
自然排序
import java.util.*;
class CollectionsDemo1
{
public static void main(String args[])
{
sortDemo();
}
public static void sortDemo()
{
List<String> list = new ArrayList<String>();
list.add("sfdff");
list.add("sf");
list.add("xfd");
list.add("rtrt");
list.add("sf");
sop(list);
Collections.sort(list);
sop(list);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
示例2:
利用比较器排序。
import java.util.*;
class CollectionsDemo1
{
public static void main(String args[])
{
sortDemo();
}
public static void sortDemo()
{
List<String> list = new ArrayList<String>();
list.add("sfdff");
list.add("sf");
list.add("xfd");
list.add("rtrt");
list.add("sf");
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)
{
if(s1.length()>s2.length())
{
return 1;
}
if(s1.length()<s2.length())
{
return -1;
}
return s1.compareTo(s2);
}
}
练习1 :
求最大值
public static void maxDemo()
{
List<String> list = new ArrayList<String>();
list.add("sfdff");
list.add("sf");
list.add("xfd");
list.add("rtrt");
list.add("sf");
sop(list);
Collections.max(list);//最大值
sop(list);
Collections.max(list,new StrLenComparator());//字符串长度最长的。
sop(list);
}
(二). 二分法查找binarySearch()
1)按自然顺序排列;
2)指定比较器进行排序。
3)二分法查找之前,必须对集合进行排序,否则无法进行。
示例3:
public static void binarySearchDemo()
{
List<String> list = new ArrayList<String>();
list.add("sfdff");
list.add("sf");
list.add("xfd");
list.add("rtrt");
list.add("sf");
Collections.sort(list);
sop(list);
int index = Collections.binarySearch(list,"xfd");//返回排序的位置。
sop("index:"+index);
int index = Collections.binarySearch(list,"xfdd");//如果不存在,则返回插入点-n-1的值
}
(三). fill(list,str)方法
1)作用:将list中的所以元素替换成指定元素str
示例4:
将List中的部分元素替换成指定元素。
public static void fillDemo()
{
List<String> list = new ArrayList<String>();
list.add("sfdff");
list.add("sf");
list.add("xfd");
list.add("rtrt");
list.add("sf");
sop(list);
Collections.fill(list,"qq");//将集合中的所有元素替换为同一个元素。
sop(list);
}
(四). 替换和翻转
1)替换replaceAll(list,oldValue,newValue):替换集合中个别元素。
2)翻转reverse(list):与原集合顺序倒过来。
示例5:
public static void replaceAlldemo()
{
List<String> list = new ArrayList<String>();
list.add("sfdff");
list.add("sf");
list.add("xfd");
list.add("rtrt");
list.add("sf");
sop(list);
Collections.replaceAll(list,"sf","qq");
sop(list);
Collections.reverse(list);
sop(list);
}
(五). 倒序Collections.reverseOrder()
1)返回值为一个比较器;
1)不传入参数,返回自然顺序的翻转比较器;
2)可以传入一个特定比较器,返回值为此比较器的翻转比较器,可以实现倒序排序。
示例6:
自然顺序的翻转比较器
import java.util.*;
class CollectionsDemo1
{
public static void main(String args[])
{
maxDemo();
}
public static void orderDemo()
{
TreeSet<String> list = new TreeSet<String>(Collections.reverseOrder());
list.add("aaa");
list.add("ds");
list.add("g");
list.add("kkkk");
sop(list);
}
示例7:
已知比较器的翻转
import java.util.*;
class CollectionsDemo1
{
public static void main(String args[])
{
maxDemo();
}
public static void orderDemo()
{
TreeSet<String> list = new TreeSet<String>(Collections.reverseOrder(new LenComparator()));
list.add("aaa");
list.add("ds");
list.add("g");
list.add("kkkk");
sop(list);
}
}
class LenComparator extends Comparator<String>
{
public boolean compare(String o1,String o2)
{
int num = new Integer(o1.length()).compareTo(new Integer(o2.length()));//如果倒序则调换o1,o2的位置。
if(num==0)
{
return o1.compareTo(o2);
}
return num;
}
}
(六). 把不同步的集合转换为同步的集合
示例8:
public static void shuffleDemo
{
List<String> list = new ArrayList<String>();
list.add("sfdff");
list.add("sf");
list.add("xfd");
list.add("rtrt");
list.add("sf");
sop(list);
Collections.shuffle(list);//能够把不同步的集合转换为同步的集合,例子相当于执行一次洗牌一次。
sop(list);
}