be essential to 和be essential for的区别是什么
be essential to和be essential for的区别为:意思不同、用法不同、侧重点不同。
一、意思不同
1.be essential to意思:必不可少
2.be essential for意思:重要/基本/实质的
二、用法不同
1.be essential to用法:作形容词指事物赖以存在或与他物相区别的“最基本的”东西。一般与to或for连用,表示“对?是要紧的”。
2.be essential for用法:作“本性,性情,性质”解时,可以用来表示物的“本质,特征,性质”,用作不可数名词,也可用来指人或动物的“天性脾气,性格”等,可用作可数名词,也可用作不可数名词。
三、侧重点不同
1.be essential to侧重点:be essential to do后面的动词是原型。
2.be essential for侧重点:be essential for doing后面的动词是正在进行时。
增强for循环亦为高级for循环。
增强for循环内部是使用的Iterator来遍历的,只能遍历数组和实现了Iterable接口的集合。优点是写法简便,无需获得数组、集合长度,也无需根据索引来访问元素。缺点是不能在循环里动态的删除元素和获取元素下标。
任何的增强for循环都可以改写为普通for循环。遍历集合所有元素的话用增强for循环更加简洁,如果是复杂的循环,还是用for循环比较好,for循环功支持索引取元素,可以使用下标来控制位置。
高级for有一个局限性,必须有被遍历的目标。
建议在遍历数组的时候,还是希望使用传统for,因为传统for可以定义角标。
凡是支持迭代器的都支持高级for
.而对于 LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用 增强for循环,也就是iterator。
下面用一个例子说明这点:
代码一
public?static?void?removeEvensVer2(List?lst)?
{?
for?(Integer?x?:?lst)?
if?(x?%?2?==?0)?
lst.remove(x);?
System.out.println(lst);?
}
public static void removeEvensVer2(List lst){
for (Integer x : lst)
if (x % 2 == 0)
lst.remove(x);
?
System.out.println(lst);
}
代码二
public?static?void?removeEvensVer3(List?lst)?
{?
Iterator?itr?=?lst.iterator();?
while?(itr.hasNext())?
if?(itr.next()?%?2?==?0)?
itr.remove();?
System.out.println(lst);?
}
public static void removeEvensVer3(List lst){
Iterator itr = lst.iterator();
while (itr.hasNext())
if (itr.next() % 2 == 0)
itr.remove();
System.out.println(lst);
}
代码一在运行时抛出异常,代码二正常
原因分析:因为增强的for循环内部就是调用iterator实现的,在遍历的时候就将list转化为了迭代器,当迭代器被创建之后,如果从结构上对列表修改除非通过迭代器自身的remove、add方法,其他任何时间任何方式的修改,迭代器都会抛出ConcurrentModificationException异常。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!