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
|
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);
- }
- }
- }
- }