java.util.Colletions 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化实例,就像一个工具类,服务于Java的Collection框架。
常用方法测试:
自定义比较器:
package cn.wangyu.collections;
import java.util.Comparator;
/**
* @author JiangMinyan
*
* @version 2016/02/18 10:07:51
*/
public class StrLenComparator implements Comparator<String> {
@Override
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);
}
}
sort(List<T> list, Comparator<? super T> c)
sort(List<T> list, Comparator<? super T> c) 对实现了Comparable接口的类进行排序。
max(Collection<? extends T> coll)
max(Collection<? extends T> coll, Comparator<? super T> comp) 将List集合中的对象的最大值找出(通过对象的comparatorTo()方法进行比较)
replaceAll(List<T> list, T oldVal, T newVal) 将list集合中指定的对象
synchronizedList(List<T> list)
synchronizedList(List<T> list, Object mutex) 返回线程同步的list集合
package cn.wangyu.collections;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;
import org.junit.Test;
/**
* @author JiangMinyan
*
* @version 2016/02/18 9:51:22
*/
public class CollectionsTest {
@Test
public void testCollections() {
// sortDemo();
// maxDemo();
// binaryDemo();
// replaceAllDemo();
reverseOrderDemo();
}
public void sortDemo() {
List<String> list = new ArrayList<String>();
list.add("adas");
list.add("h");
list.add("exe");
list.add("bsxsewq");
list.add("bsxs");
// 排序前
sop(list);
// 默认按照String自然顺序排序
// Collections.sort(list);
// 自定义StrLenComparator比较器
Collections.sort(list, new StrLenComparator());
// 排序后
sop(list);
}
public void maxDemo() {
List<String> list = new ArrayList<String>();
list.add("adas");
list.add("h");
list.add("exe");
list.add("bsxsewq");
list.add("bsxs");
// 默认按照String自然顺序排序
// Collections.sort(list);
// 自定义StrLenComparator比较器
Collections.sort(list, new StrLenComparator());
// max()
// String max = Collections.max(list);
String max = Collections.max(list, new StrLenComparator());
sop("max : " + max);
}
public void binaryDemo(){
List<String> list = new ArrayList<String>();
list.add("adas");
list.add("h");
list.add("exe");
list.add("bsxsewq");
list.add("bsxs");
sop(list);
// int index = Collections.binarySearch(list, "h");
int index = halfSearch(list, "adas");
sop("index:"+index);
}
public int halfSearch(List<String> list, String key){
int max, min, mid;
max = list.size()-1;
min = 0;
while(min<=max){
mid = (min + max) >> 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 void replaceAllDemo(){
List<String> list = new ArrayList<String>();
list.add("adas");
list.add("h");
list.add("exe");
list.add("bsxsewq");
list.add("bsxs");
sop(list);
Collections.replaceAll(list, "h", "ha");
sop(list);
Collections.reverse(list);
sop(list);
}
public void reverseOrderDemo(){
//Collections.reverseOrder()可以将默认的排序器逆转
//Collections.reverseOrder(new StrLenComparator())
TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder());
ts.add("adas");
ts.add("h");
ts.add("exe");
ts.add("bsxsewq");
ts.add("bsxs");
Iterator<String> iterator = ts.iterator();
while(iterator.hasNext()){
String str = iterator.next();
System.out.println(str);
}
}
public void synchronizedListDemo(){
List<String> list = new ArrayList<String>();
list.add("adas");
list.add("h");
list.add("exe");
list.add("bsxsewq");
list.add("bsxs");
Collections.synchronizedList(list);
sop(list);
}
public void sop(Object obj) {
System.out.println(obj);
}
}
-----------------------------------------------------华丽的分割线-----------------------------------------------------
Arrays: 操作数组的工具类
asList:将数组变成list集合。
数组--->集合:Arrays.asList();
package cn.wangyu.collections;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
/**
* @author JiangMinyan
*
* @version 2016/02/18 14:14:16
*/
public class ArraysTest {
@Test
public void arraysTest() {
String[] arr = { "csde", "dsd", "es", "kg" };
// 把数组编程list有什么好处 ?
/*
* 可以使用集合的思想和方法来操作数组中的元素。
*
* 注意:将数组变成集合,不可以使用集合的增删方法。因为数组的长度是固定的。 可以使用:contains get indexOf等方法
*
* 如果你调用增删操作会抛出UnsupportedOperationException
*/
List<String> list = Arrays.asList(arr);
sop("contains:" + list.contains("es"));
// list.add("qq");//java.lang.UnsupportedOperationException
// -------------华丽的分割线--------------------//
int[] nums = { 2, 4, 23 };
List<int[]> li = Arrays.asList(nums);
/*
* 注意: 如果数组中的元素都是对象,那么变成集合时,数组中元素就直接转成集合中的元素
* 如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
*/
sop(li);
// -------------华丽的分割线--------------------//
Integer[] numes = { 2, 4, 23 };
List<Integer> lists = Arrays.asList(numes);
/*
* 注意: 如果数组中的元素都是对象,那么变成集合时,数组中元素就直接转成集合中的元素
* 如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。
*/
sop(lists);
}
public void sop(Object obj) {
System.out.println(obj);
}
}
集合--->数组
package cn.wangyu.collections;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
/**
* @author JiangMinyan
* 集合-->数组
* Collection的toArray()
* @version 2016/02/18 14:38:19
*/
public class CollectionsToArrayTest {
@Test
public void testCollectionsToArray(){
List<String> list = new ArrayList<String>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
/*
1 指定类型的数组到底要定义多长呢?
当指定类型的数组长度小于了集合的size,那么该方法的内部会创建一个新的数组长度为集合的size
当指定类型的数组长度大于了集合的size,就不会新创建数组。二是使用传递进来的数组。
所以创建一个刚刚好的数组为佳。
2为什么要将集合变成数组?
为了限定对集合的操作。
*/
String[] array = list.toArray(new String[list.size()]);
sop(Arrays.toString(array));
}
public void sop(Object obj){
System.out.println(obj);
}
}