JAVA学习第四十三课 — 集合框架工具类(一)

一、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
<T> Collection<T>
synchronizedCollection(Collection<T> c)
返回指定 collection 支持的同步(线程安全的)collection。
static
<T> List<T>
synchronizedList(List<T> list)
返回指定列表支持的同步(线程安全的)列表。
static
<K,V> Map<K,V>
synchronizedMap(Map<K,V> m)
返回由指定映射支持的同步(线程安全的)映射。
static
<T> Set<T>
synchronizedSet(Set<T> s)
返回指定 set 支持的同步(线程安全的)set。
static
<K,V> SortedMap<K,V>
synchronizedSortedMap(SortedMap<K,V> m)
返回指定有序映射支持的同步(线程安全的)有序映射。
static
<T> SortedSet<T>
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);
			}
		}
	}
}





郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。