集合框架(4)-常用集合工具类
1.Arrays类
在collection接口中有一个方法叫做:toArray,把集合转化为object数组
把集合转化为数组:Object arr = 集合对象.toArray();
数组也可以转化为集合(List集合):
public static<T>List<T>asList(T……a)
等价于
public static<T>List<T>asList(T[] a)
示例:
public class TestArrays {
public static void main(String[] args) {
//把数组转化为List对象
List<String> list = Arrays.asList("A","B","C");
List<Date> list2 = Arrays.asList(new Date(), new Date());
//list.remove(0);//此处报错
System.out.println(list);//[A, B, C]
System.out.println(list2);//[Sun Nov 27 21:27:56 CST 2016, Sun Nov 27 21:27:56 CST 2016]
}
}
通过Arrays.asList方法得到的List对象的长度是固定的,不能增加,也不能减少,但是可以修改
原因是asList方法返回的ArrayList对象,不是java.util.ArrayList而是Arrays类中的内部类对象。
还有一个奇怪的现象,当先定义一个int[]数组后,把这个数组整体带进去转换出来的结果并不是我们想要的,这个是因为基本数据类型的自动装箱造成的。
public class TestArrays {
public static void main(String[] args) {
//把数组转化cv为List对象
String[] arr = {"A","B","C"};
List<String> list = Arrays.asList(arr);
//list.remove(0);//此处报错
System.out.println(list);//[A, B, C]
//自动装箱,把1看成Integer对象,此处有四个对象
List<Integer> list3 = Arrays.asList(1,2,3,4);
System.out.println(list3);//[1, 2, 3, 4]
//此处会报错,无法转换
//定义了一个int类型的数组,此处有一个对象
int[] arr2 = {1,2,3,4};
//直接把数组当作是对象。
List<int[]> list4 = Arrays.asList(arr2);
System.out.println(list4);//[[I@16f6e28]
}
}
2.Collections类
该类封装了Set,List,Map的操作的工具方法
获取空集对象(没有元素的集合,注意集合不为null)
public class TestCollections {
public static void main(String[] args) {
//创建一个新的空List集合,其他的Set,Map是相同的
List<Object> list1 = Collections.EMPTY_LIST; //常量方法
List<Object> list2 = Collections.emptyList(); //方法,创建的是不可变的
List<Object> list3 = new ArrayList<>();//java7开始,方法
}
}
常用集合类
HashSet/ArrayList/HashMap都是线程安全的,在多线程环境下不安全。
在Collections类中获取线程安全的集合方法
List list = Collections.syhchronizedList(new ArrayList());
当要迭代的时候使用synchronized
synchronized(list){
//TODO
}
其他的也是相同
Set set = Collections.syhchronizedList(new HashSet());
Map map = Collections.syhchronizedList(new HashMap());