一、Collections:集合框架的工具类
其中的方法都是静态的
排序方法演示
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class ComparaByLeng implements Comparator<String>{
public int compare(String o1, String o2) {
int t = o1.length() - o2.length();
return t==0?o1.compareTo(o2):t;
}
}
public class Main
{
public static void main(String[] args) {
Colletyions_Demo();
}
public static void Colletyions_Demo(){
List<String> li = new ArrayList<String>();
li.add("asd"); li.add("d");
li.add("efasd"); li.add("efasd");
li.add("dsssfd"); li.add("xxxxd");
//System.out.println(list);
//Collections.sort(list);//排序
//System.out.println(list);
//sort :public static <T extends Comparable<? super T>> void sort(List<T> list)
//模拟sort
//Mysort(list);
//System.out.println(list);
Mysort(li,new ComparaByLeng());
System.out.println(li);
Collections.sort(li,new ComparaByLeng());
System.out.println(li);
}
/*public static <T extends Comparable<? super T>> void Mysort(List<T> list)
{
for (int i = 0; i < list.size()-1; i++) {
for (int j = i+1; j < list.size(); j++) {
if(list.get(i).compareTo(list.get(j))>0){
Collections.swap(list, i, j);//工具类 交换
}
}
}
} */
public static <T> void Mysort(List<T> li,Comparator<? super T> com) {
for (int i = 0; i < li.size()-1; i++) {
for (int j = i+1; j < li.size(); j++) {
if(com.compare( li.get(i), li.get(j) ) > 0 ){
Collections.swap(li, i, j);
}
}
}
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Main
{
public static void main(String[] args) {
Colletyions_Demo();
}
public static void Colletyions_Demo(){
List<String> li = new ArrayList<String>();
li.add("asd"); li.add("d");
li.add("efasd"); li.add("efasd");
li.add("dsssfd"); li.add("xxxxd");
Collections.sort(li);
System.out.println(li);
int index = Collections.binarySearch(li, "d");
System.out.println(index);//负数代表没找到
//获取最大值
String maxstrString = Collections.max(li);
System.out.println("max = "+maxstrString);
//获取最小值
String minstrString = Collections.min(li);
System.out.println("min = "+minstrString);
//取最长
String maxlenString = Collections.max(li,new ComparaByLeng());
System.out.println(maxlenString);
}
}
逆转、替换方法演示
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.TreeSet;
public class Main
{
public static void main(String[] args) {
Colletyions_Demo();
}
public static void Colletyions_Demo(){
//原理
// TreeSet<String> ts = new TreeSet<String>(new Comparator<String>() {
// public int compare(String o1, String o2) {
//
// return o2.compareTo(o1);
// }
// });
//封装后
TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder());
ts.add("ad");ts.add("xad");
ts.add("fdagrrgd");ts.add("a");
ts.add("gedsad");
System.out.println(ts);
//如果有比较器,逆转
//长度逆转
TreeSet<String> td = new TreeSet<String>(Collections.reverseOrder(new ComparaByLeng()));
td.add("ad");td.add("xad");
td.add("fdagrrgd");td.add("a");
td.add("gedsad");
System.out.println(td);
//replaceAll / reverse方法
List<String> al = new ArrayList<String>();
al.add("ads");
al.add("ds");
al.add("s");
Collections.reverse(al);
System.out.println(al);
Collections.replaceAll(al, "s", "y");//实际上 -> set(indexOf("s"),"y")
System.out.println(al);
}
}
1、fill(List<? super T> list, T obj)
使用指定元素替换指定列表中的所有元素。
Collections.fill(list,"asd");
2、shuffle(List<?> list)
使用默认随机源对指定列表进行置换
Collections.shuffle(list);随机
更多方法看API文档。。。
将非同步集合转成同步集合的方法
static
| synchronizedCollection(Collection<T> c) 返回指定 collection 支持的同步(线程安全的)collection。 | |
static
| synchronizedList(List<T> list) 返回指定列表支持的同步(线程安全的)列表。 | |
static
| synchronizedMap(Map<K,V> m) 返回由指定映射支持的同步(线程安全的)映射。 | |
static
| synchronizedSet(Set<T> s) 返回指定 set 支持的同步(线程安全的)set。 | |
static
| synchronizedSortedMap(SortedMap<K,V> m) 返回指定有序映射支持的同步(线程安全的)有序映射。 | |
static
| synchronizedSortedSet(SortedSet<T> s) 返回指定有序 set 支持的同步(线程安全的)有序 set。 |
转换原理:
List list = new ArrayList();
List = MyCollections.synList(list);//返回一个同步的list
class MyCollections{
public List synList (List list){
return new MyList(list);
}
private class MyList implements List{
private List list;
private static final Object lock = new Object();
public MyList() {
super();
// TODO Auto-generated constructor stub
}
public MyList(List list) {
super();
this.list = list;
}
public boolean add(Object obj){
synchronized (lock) {
return list.add(obj);
}
}
public boolean remove(Object obj){
synchronized (lock) {
return list.remove(obj);
}
}
}
}