1.java8有什么新特性?
简单来说有:
·Lambda表达式
·函数式接口
·方法引用与构造器引用
·Stream API
·接口的默认方法与静态方法
·新时间日期API
·其它新特性
其中,引用最广泛的新特性是Lambda表达式和Stream API。
注释:Stream 是Java8中处理集合的关键抽象概念,它可以对集合进行非常复杂的查找、过滤、筛选等操作
简单说java8优点如下:
·速度更快
·代码更少(增加了新的语法Lambda表达式)
·强大的Stream API
·便于并行
·最大化减少空指针异常Optional
2. Iterator的并发修改异常(集合(LIst,Set))
在list集合迭代元素中,对元素进行判断,一旦条件满足就添加一个新元素。代码如下
public class IteratorDemo {
//在list集合迭代元素中,对元素进行判断,一旦条件满足就添加一个新元素
public static void main(String[] args) {
//创建List集合
List<String> list = new ArrayList<String>();
//给集合中添加元素
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
//迭代集合,当有元素为"abc2"时,集合加入新元素"itcast"
Iterator<String> it = list.iterator();
while(it.hasNext()){
String str = it.next();
//判断取出的元素是否是"abc2",是就添加一个新元素
if("abc2".equals(str)){
list.add("itcast");// 该操作会导致程序出错
}
}
//打印容器中的元素
System.out.println(list);
}
}
运行上述代码发生了错误 java.util.ConcurrentModificationException这是什么原因呢?
在迭代过程中,使用了集合的方法对元素进行操作。导致迭代器并不知道集合中的变化,容易引发数据的不确定性。
并发修改异常解决办法:在迭代时,不要使用集合的方法操作元素。
那么想要在迭代时对元素操作咋办?通过ListIterator迭代器操作元素是可以的,ListIterator的出现,解决了使用Iterator迭代过程中可能会发生的错误情况。