目录
阐述
数组和集合的区别是什么
两点区别:
长度——数组的长度是固定的;集合的长度可变。
存储元素的数据类型——数组即可以存基本类型,也可以存引用类型;集合只能存引用类型的数据。
数组、字符串、集合的长度分别如何获取?
数组.length
字符串.length()
集合.size()
什么是并发修改异常?怎么产生的?如何解决?
并发修改异常ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,就出现异常。
这个异常的根源在于迭代器。集合调用iterator方法创建迭代器时,会把自己的计数器传给迭代器作为初始值。计数器记录的是集合被修改的次数。每次调用迭代器的方法时,迭代器都会检测自己的计数器和相应集合的计数器是否一样,如果不一样就会报错。
不调用迭代器是不会有并发修改异常的。用迭代器遍历集合的时候,通过迭代器修改集合可避免并发修改异常。
数组和(单列)集合之间如何相互转换?需要注意什么问题?
集合转数组:集合.toArray()
数组转集合:Arrays.asList(数组)
需要注意的问题:
数组直接转成的集合是不可变集合,不能进行增加或删除操作,但可以进行修改操作。如果想转成真正的可变集合,就创建一个新的集合,参数就是Arrays.asList(数组)返回的不可变集合。
数组转集合——如果是引用类型的数组转集合,是直接转(数组中的元素即集合中的元素);如果是基本类型的数组转集合,是把整个数组当作集合的一个元素来转的。
为什么出现集合类?集合体系结构是什么样的?
为了方便对多个对象进行操作,就出现了可变的容器来存储多个对象,这个可变的容器就是集合。
集合分双列集合和单列集合。
单列的顶级父接口是Collection,由List接口和Set接口继承。
实现List接口的集合类,里面的元素是可重复的,取出元素的顺序和存储元素的顺序是一致的,常用的集合类有ArrayList和LinkedList。
实现Set接口的集合类,里面的元素是不重复的,取出元素的顺序和存储元素的顺序不一致,常用的集合类有HashSet。
双列的顶级接口是Map,实现该接口的类有HashMap。
课后作业
使用List集合存储对象并行遍历,遍历集合的时候,在控制台输出元素值。要求使用三种方式进行遍历(迭代器、普通for、增强for)。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
//操作步骤:
//1. 创建集合对象。
//2. 把元素添加到集合。
//3. 遍历集合。
public class ListIterator {
public static void main(String[] args) {
List<String> strList = new ArrayList<>();
strList.add("happy");
strList.add("new");
strList.add("year");
System.out.println("迭代器----------------------------------------");
Iterator<String> strIterator = strList.iterator();
while (strIterator.hasNext()) {
System.out.println(strIterator.next());
}
System.out.println("普通for---------------------------------------");
for(int i=0; i<strList.size(); i++) {
System.out.println(strList.get(i));
}
System.out.println("增强for---------------------------------------");
for(String element : strList) {
System.out.println(element);
}
}
}