今天看了一篇讲集合和数组的文章,发现了很多以前没有注意到的地方。总结如下:
第一点是说的性能方面:
来看代码:
<span style="white-space:pre"> </span>List<String> arrayList = new ArrayList<String>();
<span style="white-space:pre"> </span>arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");
arrayList.add("e");
arrayList.add("f");
arrayList.add("g");
arrayList.add("h");
//1
String[] s1 = arrayList.toArray(new String[arrayList.size()]);
//2
String[] s2 = arrayList.toArray(new String[0]);
//3
List<String> list1 = new ArrayList<String>(arrayList);
//4
List<String> list2 = (List<String>) Collections.unmodifiableCollection(arrayList);
第二点说的是接口方面:
集合提供了一系列的方法供用户使用,例如equals和toString,这些是数组没有的.
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
//true
System.out.println(list.equals(Arrays.asList("a","b")));
String[] s = {"a","b"};
//false
System.out.println(s.equals(new String[]{"a","b"}));
另外集合还可以检查包含的元素,提取子列表和计算交集等等。
说到Collections.unmodifiableCollection(arrayList)方法,还看到一篇讲用在什么地方的,这个方法的作用是返回一个只读操作的集合.
就像在Student类里我们有一个课程的集合,一般我们都是getCourse()拿到这个集合然后再使用add()方法往里面增加课程,但是这样一来,
岂不是变成了对Course对象的增加,对于面向对象编程来说,应该是学生主动去增加课程啊,也就是说,学生类里面应该有一个增加课程
的方法,于是写了一个public void addCourse(Course course){courseList.add(course)}方法,但是你并没有保证getCourse().add(course)
不能使用啊,所以这里我们就要用到Collections.unmodifiableCollection(courseList);了,它返回一个只读的集合,当你尝试用getCourse.add(course)
方法时,会抛出一个java.lang.UnsupportedOperationException异常,这样一来就达到了我们的要求。