java collections framework tool - yaokun123/php-wiki GitHub Wiki

集合框架工具类

一、collections

collections:是集合框架的工具类,里面的方法都是静态的。

  • Collections排序
public static void demo(){
    List<String> list = new ArrayList<String>();

    list.add("abcde");
    list.add("cba");
    list.add("aa");
    list.add("zzz");
    list.add("cba");
    list.add("nbaa");
   
    //对list集合进行指定顺序的排序
    System.out.println(list);
    Collections.sort(list);
    System.out.println(list);

    
    Collections.swap(list,i,j);
}
  • Collections折半&最值
int index Collections.binarySearch(list,"aaa");
String max = Collections.max(list);
String max = Collections.max(list,new ComparatorByLength());
  • Collections逆序&替换
TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder());
TreeSet<String> ts = new TreeSet<String>(Collections.ComparatorByLength());

Collections.replaceAll(list,"cba","nba");
  • 将非同步集合转成同步集合的方法
Collections.fill(list,"cc");
Collections.shuffle(list);

List list = new ArrayList();//非同步
list = MyCollections.synList(list);//返回一个同步的list

二、Arrays

Array:是集合框架的工具类,里面的方法都是静态的。

  • 将数组转成集合 好处:可以使用集合点方法操作数组中的元素。

注意:数组的长度是固定的,所以对于集合的增删方法是不可以使用的否则会发生UnsupportedOperationException

如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行集合存储。

如果数组中的元素是基本数值类型,那么会将该数组作为集合中的元素进行存储。

Arrays.asList(arr);
  • 集合转成数组

使用的就是Collection接口中的toArray方法

集合转成数组:可以对集合中的元素操作的方法进行限定,不允许对齐进行增删。

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[2]);
  • JDK1.5新特性ForEach
foreach语句:
格式:
for(类型 变量 :collection集合|数组){}

public static void main(String[] args){
    List<String> list = new ArrayList<String>();

    list.add("abc1");
    list.add("abc2");
    list.add("abc3");

    for(String s : list){
        System.out.println(s);
    }

    int[] arr = {3,1,5,7,4};
    for(int i : arr){
        System.out.println(i);
    }
}

传统for和高级for的区别?
传统for可以完成对语句执行很多次,因为可以定义控制循环的增量和条件
高级for是一种简化形式,它必须有被遍历的目标。该目标要么是数组,要么是Collection单列集合。

对数组的遍历如果仅仅只是获取数组中的元素,可以使用高级for。
如果要对数组的角标进行操作建议使用传统for。

可以使用高级for遍历map集合吗?
不能直接使用,但是可以将map转成单列的set就可以用了。

三、函数可变参数JDK1.5新特性

函数的可变参数,其实就是一个数组,但是接受的是数组的元素,自动将这些元素封装成数组。简化了调用者的书写。

public static void main(String[] args){
    int sum = newAdd(5,1,4,7,3);
}

public static int newAdd(int... arr){
    int sum = 0;
    for(int i = 0;i<arr.length;i++){
        sum+=arr[i];
    }
    return sum;
}

注意:可变参数类型,必须定义再参数列表的结尾。

四、静态导入-JDK1.5新特性

import java.util.Collections
Collections.sort(list);

修改如下:
import static java.util.Collections.sort;//静态导入,其实导入的是类中的静态成员。
import static java.util.Collections.*;//静态导入,其实导入的是类中的静态成员。
sort(list);

五、System类

system类中的方法和属性都是静态的。

常见方法:

long currentTimeMillis();//获取当前时间的毫秒值。
Properties prop = System.getProrerties();//获取系统的属性信息,并存储到Properties集合中。
//Properties集合中存储的都是String类型的键和值。最好使用他自己的存储和取出方法来完成元素的操作。

六、Runtime类

Runtime没有构造方法摘要,说明该类不可以创建对象
又发现还有非静态的方法,说明该类应该返回静态的返回该对象的方法。
而且只有一个,说明Runtime类使用了单列涉及模式。

Runtime r = Runtime.getRuntime();
r.exec("xxx.exe");//执行xxx.exe

七、Math类

Math提供了操作数学运算的方法,都是静态的。

ceil();向上取整(返回大于参数的最小整数)
floor();向下取整(返回小于参数的最大整数)
round();四舍五入
pow(a,b);a的b次方

八、Date类

Date date = new Date();//将当前日期时间封装成Date对象
Date date2 = new Date(13356712306711);//将指定毫秒值封装成Date对象

日期和毫秒值之间的转换

毫秒值-》日期对象:
1、通过Date对象的构造方法new Date(timeMillis)
2、还可以通过setTime设置(因为可以通过Date对象的方法对该日期中的各个字段(年月日)进行操作)

日期对象=》毫秒值
1、getTime方法(因为可以通过具体的数值进行运算)

对日期对象格式化
Date date = new Date();
//获取日期格式对象,具体的默认的风格
DateFormat dateFormat = DateFormat.getDateInstance();
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
DateFormat dateFormat = DateFormat.getDateTimeInstance();

String str_date = dateFormat.format(date);

将日期格式的字符串转化为日期对象
使用DateFormat类中的
⚠️ **GitHub.com Fallback** ⚠️