---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
数组和集合类同是容器,有何不同?
数组中可以存储基本数据类型,也可以存储对象,
集合只能存储对象
数组长度是固定的
集合长度是可变的
有个疑问:
在java中,所有元素都是对象,对于基本数据类型,实际上也是一个对象,因为java对基本数据类型有自动装箱和拆箱的功能,所以,数组和集合的区别应该在存储的内容上没有区别才对?是否可以说,集合也可以存储基本数据类型?
解答:JDK1.5之后,集合中可以添加基本数据类型,就是自动装箱拆箱的缘故.所以如果要往集合里装基本数据类型的时候,特别是涉及到泛型的写法
这样的泛型写法是错误的:
TreeMap<char,int>treemap = new TreeMap<char,int>();
应该这样写
TreeMap<character,Integer>treemap=newTreeMap
< character,Integer >();
集合类的特点
集合只用于存储对象(不能存储基本数据类型),集合长度是可变的,集合可以存储不同类型的对象。
Collection接口有两个子接口:
List:可存放重复元素,元素存取是有序的。(有序可重复)
Set:不可以存放重复元素,元素存取是无序的(无序不可重复)
迭代取出方法Iterator()是Collection里面的方法,所有,Collection的子类都具有Iterator()
一道面试题:collection和collections有什么区别?
Collection是一个接口,也可以说是一个框架
Collections专门用于对集合进行操作的工具类,
几个主要的功能方法:
排序:
public static <T extends Comparable<?super T>> void sort(List<T> list):根据元素的自然顺序对指定列表按升序进行排序
public static <T> voidsort(List<T> list,Comparator<? super T> c):根据指定比较器产生的顺序对指定列表进行排序
翻转:
static voidreverse(List<?> list)
:反转指定列表中元素的顺序
Ps:
注意,该方法是没有返回值类型的,是直接修改了元素在集合中的位置
publicstatic <T> Comparator<T> reverseOrder()
:返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序
publicstatic <T> Comparator<T> reverseOrder (Comparator<T> cmp)
:返回一个比较器,它强行逆转指定比较器的顺序。如果指定比较器为 null,则此方法等同于 reverseOrder()
Ps:
注意,该方法是传入一个比较器对象,然后返回一个比较器对象,改变了传入比较器内部的比较方式
加锁:
重点介绍一下加锁方法
synchronizedList(List<T> list)
synchronizedMap(Map<K,V> m)
synchronizedSet(Set<T> s)
传入未加锁的集合,返回一个加锁的集合
将数组转变成集合,不能使用集合的增删方法,因为数组的长度是固定的,如果使用了增删操作,那么会抛异常
例:
List list = Array.asList(arr);
List.add(“01”);
这个编译会不通过
一个注意的地方:
如果数组中的元素都是对象,那么转成集合时,数组中的元素就会直接转成集合中的元素
如果数组中的元素都是基本数据类型,那么会将数组名作为集合中的元素存在
int[] arr={4,3,4,2,5,6}
错误的写法List<Integer>Arrays.asList(arr);
正确的写法:List<int[]>Arrays.asList(arr);
对于Integer[] arr={4,3,4,2,5,6};
正确的写法List<Integer>Arrays.asList(arr);
错误的写法:正确的写法:List< Integer []>Arrays.asList(arr);
为什么要把集合转成数组?
为了限制对元素的操作,因为数组的长度是固定的,限制增删操作
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------