Collection集合
集合和数组的区别:
1.数组可以存放任意类型,集合只能装引用数据类型(但是有自动装箱所以不会报错) 2.数组的长度固定而集合的长度是可变的。
Collection 常用功能
Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的一些方法,这些方法可用于操作所有的单列集合。方法如下:
-
public boolean add(E e)
: 把给定的对象添加到当前集合中 。 -
public void clear()
:清空集合中所有的元素。 -
public boolean remove(E e)
: 把给定的对象在当前集合中删除。 -
public boolean contains(Object obj)
: 判断当前集合中是否包含给定的对象。 -
public boolean isEmpty()
: 判断当前集合是否为空。 -
public int size()
: 返回集合中元素的个数。 -
public Object[] toArray()
: 把集合中的元素,存储到数组中
一般创建类对象调用方法使用,如
产生10个1-100的随机数,并放到一个数组中,把数组中大于等于10的数字放到一个list集合中,并打印到控制台。
Iterator迭代器
迭代是Collection集合元素遍历的一种方式。在取元素之前先判断集合中是否有元素while(iter.hasNext()),如果有,就把这个元素取出来定义一个变量接收String e = iter.next()。继续判断,如果有继续获取元素,直到集合中所有元素全部取出。这种取出方式专业术语称为迭代。
一般通过Iterator iter = 集合名.iterator()使用
在迭代器运行过程中不能对集合进行操作,因为集合的增删意味着集合本身的modCount发生变化
当调用迭代器next方法时,就会检查,modCount和expectedModCount的值是否相同,如果不相同将直接抛出异常报错
如果一定要删除数据,可以使用迭代器自带的remove方法
增强for循环【foreach】
格式:
for(变量类型 变量:数组/集合名){}
由于foreach也使用了迭代器所以不能对数组/集合进行增删操作
疑问:当我执行以下代码时,程序能正常输出结果但是会抛出异常:Exception in thread "main" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap')at zuoye2.main(zuoye2.java:29)
而LinkdedList默认定义为Object类,使用增强for则不能把索引i定义为int类型,在不使用强转的情况下将无法对数据进行操作