JAVA——集合框架的工具类Collections

时间:2023-02-24 23:20:38

Collections:它的出现给集合操作提供了更多的功能。这个类不需要创建对象,内部提供的都是静态方法。

Collections.sort(list);//list集合进行元素的自然顺序排序。
Collections.sort(list,new ComparatorByLen());//按指定的比较器方法排序。
Collections.max(list); //返回list中字典顺序最大的元素。 
int index = Collections.binarySearch(list,"zz");//二分查找,返回角标。
Collections.reverseOrder();//逆向反转排序。 Collections.shuffle(list); //随机对list中的元素进行位置的置换。
Collections.swap(list,1,2);//将第二个和第三个元素互换
将非同步集合转成同步集合的方法:
Collections中的 XXX synchronizedXXX(XXX);
List synchronizedList(list); Map synchronizedMap(map);
原理:定义一个类,将集合所有的方法加同一把锁后返回。

Collection 和 Collections的区别:
Collections是个java.util下的类,是针对集合类的一个工具类,提供一系列静态方法,实现对集合的查找、排序、替换、线程安全化(将非同步的集合转换成同步的)等操作。

Collection是个java.util下的接口,它是各种集合结构的父接口,继承于它的接口主要有Set和List,提供了关于集合的一些操作,如插入、删除、判断一个元素是否其成员、遍历等。
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。
举例:

import java.util.*;

class CollectionsDemo
{

public static void main(String[] args)
{
//sortDemo();
//maxDemo();
//binarySearchDemo();
//fillDemo();
//replaceAllDemo();
//orderDemo();
//lenReveDemo();
shuffleDemo();
}

public static void orderDemo()
{
TreeSet<String>ts = new TreeSet<String>(Collections.reverseOrder());
ts.add("abcd");
ts.add("aaa");
ts.add("kkkkk");
ts.add("qq");
sop(ts);
}

public static void shuffleDemo()
{
List<String>list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("kkkkk");
list.add("qq");
list.add("aaa");
sop(list);
Collections.shuffle(list);
sop(list);
}
public static void lenReveDemo()
{
TreeSet<String>ts = new TreeSet<String>(Collections.reverseOrder(new StrLenComparator()));
ts.add("abcd");
ts.add("a");
ts.add("kkk");
ts.add("qq");
sop(ts);
}
public static void replaceAllDemo()
{
List<String>list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("kkkkk");
list.add("qq");
list.add("aaa");
sop(list);
Collections.replaceAll(list,"aaa","ttt");
sop(list);
Collections.reverse(list);
sop(list);

}
public static int halfSearch(List<String>list,String key)
{
int max,min,mid;
max = list.size()-1;
min = 0;
while(min<=max)
{
mid = (max+min)>>1;
String str = list.get(mid);
int num = str.compareTo(key);
if(num>0)
max = mid-1;
else if(num<0)
min = mid+1;
else
return mid;
}
return -min-1;
}


public static int halfSearch2(List<String>list,String key,Comparator<String>cmp)
{
int max,min,mid;
max = list.size()-1;
min = 0;
while(min<=max)
{
mid = (max+min)>>1;
String str = list.get(mid);
int num = cmp.compare(str,key);
if(num>0)
max = mid-1;
else if(num<0)
min = mid+1;
else
return mid;
}
return -min-1;
}

public static void maxDemo()
{
List<String>list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("kkkkk");
list.add("qq");
list.add("aaa");

sop(list);
Collections.sort(list);
sop(list);
String s = Collections.max(list);
String len = Collections.max(list,new StrLenComparator());
sop(s);
sop(len);
}

public static void fillDemo()
{
List<String>list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("kkkkk");
list.add("qq");
list.add("aaa");
sop(list);
Collections.fill(list,"pp");
sop(list);
}
public static void binarySearchDemo()
{
List<String>list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("kkkkk");
list.add("qq");
list.add("aaa");
sop(list);
//int index = Collections.binarySearch(list,"aaa");
//int index = halfSearch(list,"qqq");
int index = halfSearch2(list,"ewdrds",new StrLenComparator());
sop("index="+index);
}
public static void sortDemo()
{
List<String>list = new ArrayList<String>();
list.add("abcd");
list.add("aaa");
list.add("kkkkk");
list.add("qq");
list.add("aaa");
sop(list);
//Collections.sort(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);
}
}