常用对象API(集和框架--工具类)

Collections-排序
对list集和进行指定顺序的排序

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
//通过字符串长度进行比较的比较器
class ComparatorByLength implements Comparator<String>{
    public int compare(String o1,String o2) {
        int temp = o1.length()-o2.length();
        return temp==0?o1.compareTo(o2):temp;
    }
}
public class CollectionsDemo {
    public static void main(String args[]) {
        demo_1();
    }
    public static void demo_1() {
        List<String> list = new ArrayList<String>();
        list.add("abcde");
        list.add("fddd");
        list.add("addd");
        list.add("hello");
        list.add("world");
        System.out.println(list);
        //对list集和进行指定顺序的排序
        // Collections.sort(list);
        //mySort(list);
        mySort_string(list,new ComparatorByLength());
        System.out.println(list);
    }
    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){
                    // T temp = list.get(i);
                    // list.set(i, list.get(j));
                    // list.set(j, temp);
                    Collections.swap(list, i, j);
                }
            }
        }
    }
    //通过自定义比较器按字符串长度排序
    public static <T> void mySort_string(List<T> list,Comparator<? super T> comp) {
        for(int i=0;i<list.size()-1;i++){
            for(int j=i+1;j<list.size();j++){
                //comp.compare(list.get(i), list.get(j));
                if(comp.compare(list.get(i),list.get(j))>0){
                    // T temp = list.get(i);
                    // list.set(i, list.get(j));
                    // list.set(j, temp);
                    Collections.swap(list, i, j);
                }
            }
        }
    }
}

二分查找(List)

int index = Collections.binarySearch(list, "hello");//[addd, fddd, abcde, hello, world]
System.out.println("index:"+index);//index:3

求集和最大值

System.out.println(Collections.max(list));//world

求集和最小值

System.out.println(Collections.min(list));//abcde

Collections.reverseOrder()

// TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder());
//Collections.reverseOrder()可以将具备的自然排序的顺序进行逆转
//[pencil, hahh, book, bag, as]
TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder(new ComparatorByLength()));
//将已有比较器进行逆转 

Collections.replaceAll()

List<String> ts = new ArrayList<String>();
ts.add("hahh");
ts.add("boas");
ts.add("bag");
ts.add("pencil");
ts.add("as");
ts.add("z");
System.out.println(ts);//[hahh, boas, bag, pencil, as, z]
Collections.replaceAll(ts,"as","hello");
ts.set(0, "element");//[element, boas, bag, pencil, hello, z]
System.out.println(ts);//[hahh, boas, bag, pencil, hello, z]

Collections.fill()

Collections.fill(ts, "zz");//[zz, zz, zz, zz, zz, zz]

Collections.shuffle()

Collections.shuffle(ts);//[hahh, boas, bag, pencil, as, z]-->[z, boas, bag, hahh, as, pencil]

给非同步的集和加锁
原理

class MyCollections{
    public static List synList(List list) {
        return new MyList(list);
    }
    private class MyList implements List{
        private List list;
        private static final Object lock = new Object();
        MyList(List list){
            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);
            }
        }
    }
}
List list = new ArrayList();//非同步
list = MyCollections.synList(list);//返回一个同步的list

如何得到同步的集和
在这里插入图片描述

List<String> list = new ArrayList<>();
List<String> ts = Collections.synchronizedList(list);

Arrays 数组转集和

public static void demo_2() {
	/**
	 * Arrays集和框架的工具类。里面的方法都是静态的。
	 */
	//Arrays.toString()方法
	// int[] arr = {1,2,3,4,5};
	// System.out.println(Arrays.toString(arr));//[1, 2, 3, 4, 5]
	//asList(数组):方法将数组转成集和
	//好处:可以使用集和的方法操作数组的元素。
	//注意:数组的长度是固定的,所以对于集和的增删方法是不能使用的,
	//否则会发生异常:java.lang.UnsupportedOperationException
	String[] arr = {"haha","xixi","hehe"};
	List<String> list = Arrays.asList(arr);//数组转集和
	//list.add("heihei");//java.lang.UnsupportedOperationException
	System.out.println(list.contains("haha"));//true
}
public static void demo_3(){
	/**
	 * 如果数组中的元素是对象,转成集和时,直接将数组中的元素作为集和中的元素进行存储
	 * 如果数组中的元素是基本类型数值,那么会将该数组作为集和中的元素进行存储。
	 */
	int[] arr = {1,2,3,4};
	List list = Arrays.asList(arr);
	System.out.println(list);//[[I@279f2327]
}

toArray 集和转数组

//集和转数组
    //使用的是Collection接口中的toArray方法。
    //集和转数组可以对集和中的元素操作方法进行限定:不允许对其进行增删
    public static void demo_4(){
    List<String> list = new ArrayList<String>();
    list.add("abc1");
    list.add("abc2");
    list.add("abc3");
    /*
    toArray方法需要传入一个指定类型的数组。
    长度该如何定义呢?
    如果长度小于集和的size,该方法创建一个同类型并和集和相同size的数组。
    如果长度大于集和的size,该方法使用指定数组,存储集和中的元素,其他位置默认为null。
    最好长度指定为集和的size。
    */
    String[] arr = list.toArray(new String[list.size()]);
    System.out.println(Arrays.toString(arr));
}

JDK1.5特性
foreach

public static void demo_5(){
       /**
        * foreach语句:
        * 格式:
        * for(类型 变量:collection集和|数组)
        * {
        * }
        */
       List<String> list = new ArrayList<String>();
       list.add("abc1");
       list.add("abc2");
       list.add("abc3");
       // Iterator<String> it = list.iterator();
       // while(it.hasNext()){
       //     System.out.println(it.next());
       // }
       for(String s:list){
           System.out.println(s);
       }
       int[] arr = {1,2,3,4};
       for(int i:arr){
           System.out.println(i);
       }
       /**
        * 传统for和高级for的区别:
        * 传统for可以控制循环的增量和条件;
        * 高级for是一种简化形式,必须有被遍历的目标,该目标要么是数组要么是collection单列集和。
        * 对于数组的遍历,如果仅仅是获取数组中的元素,使用高级for,如果要对数组角标进行操作,使用传统for。
        * 不能直接用高级for遍历map集和!将map集和转成单列的set就可以了
        */
       Map<Integer,String> map = new HashMap<>();
       map.put(1,"he");
       map.put(2,"hei");
       map.put(3,"hen");
       for(Integer key:map.keySet()){
           String value = map.get(key);
           System.out.println(key+"::"+value);
       }
       for(Map.Entry<Integer,String> me : map.entrySet()){
           Integer key = me.getKey();
           String value = me.getValue();
           System.out.println(key+"_"+value);
       }
    }

函数可变参数

System.out.println(new_add(1,2,3,4,5));//15
/**
     * 函数的可变参数。
     * 其实就是一个数组,但是接收的是数组的元素。
     * 自动将这些元素封装成数组,简化了调用者的书写。
     * 注意事项:可变参数类型必须定义在参数列表的结尾处。
     */
    public static int new_add(int... arr){
        int sum = 0;
        for(int i=0;i<arr.length;i++){
            sum = sum+arr[i];
        }
        return sum;
    }

静态导入

import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
import static java.util.Collections.sort;//静态导入,其实导入的是类中的静态成员
public static void main(String args[]) {
        List<String> list = new ArrayList<String>();
        list.add("he");
        list.add("hah");
        list.add("heihei");
        sort(list);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值