集合和[]的一些问题

来源:互联网 发布:dg加密软件 编辑:程序博客网 时间:2024/06/06 05:10

今天看了一篇讲集合和数组的文章,发现了很多以前没有注意到的地方。总结如下:

第一点是说的性能方面:

来看代码:

<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");//1String[] s1 = arrayList.toArray(new String[arrayList.size()]);//2String[] s2 = arrayList.toArray(new String[0]);//3List<String> list1 = new ArrayList<String>(arrayList);//4List<String> list2 = (List<String>) Collections.unmodifiableCollection(arrayList);

第二点说的是接口方面:

集合提供了一系列的方法供用户使用,例如equals和toString,这些是数组没有的.

List<String> list = new ArrayList<String>();list.add("a");list.add("b");//trueSystem.out.println(list.equals(Arrays.asList("a","b")));String[] s = {"a","b"};//falseSystem.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异常,这样一来就达到了我们的要求。


0 0