一:List接口:

子类:ArrayList   LinkedList

特点:Unlike sets, lists typically allow duplicate elements.不像set集合,List集合允许元素重复。

The List interface provides four methods for positional (indexed) access to list elements. Lists (like Java arrays) are zero based. List集合提供一些关于索引的访问元素的方法,和数组一样起始索引:0;

也就是说List集合是存取是有序的。比如存:11,12,13.取元素也是11,12,13.

List集合比对2个对象使用equals()比较。

也就是说之前Collection的方法,我们可以用精确的索引来操作。

 package test09;

 import java.util.ArrayList;
import java.util.List; public class List_Demo {
public static void main(String...args){
list_test();
}
public static void list_test(){
List<Integer> li_te=new ArrayList<>();
li_te.add();
li_te.add();
li_te.add();
li_te.add();
li_te.add();
li_te.add(,);//指定位置添加元素。
System.out.print(li_te);
li_te.remove();//指定位置删除元素。
System.out.print(li_te);
Integer get_el=li_te.get();
System.out.print(get_el);//指定位置获取元素,如果超出索引报错误:IndexOutOfBoundsException
li_te.set(,);//replace替换指定位置的元素。
System.out.print(li_te);
for(Integer i=;i<li_te.size();i++){
System.out.print(li_te.get(i));//使用索引进行迭代。
}
}
}

二:迭代器Iterator并发异常处理:

看如下代码:

 package test09;

 import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; public class List_It {
public static void main(String...args){
op_It();
}
public static void op_It(){
List<String> str_list=new ArrayList<>();
str_list.add("i");
str_list.add("b");
str_list.add("n");
str_list.add("m");
Iterator<String> str_it=str_list.iterator();
while (str_it.hasNext()){
String test_str=str_it.next();
if (test_str.equals("m")){
str_list.add("k");
}
}
}
}

报如下的错误:

Exception in thread "main" java.util.ConcurrentModificationException

这是为什么呢?

这是因为在我们使用迭代器Iterator的时候,同时对集合元素进行操作,但是迭代器并不知道集合发生变化,所以抛出如上的错误。

解决方法:解决并发引起的错误,在迭代的集合元素的时候,不要进行相关的元素操作。

或者使用listiterator方法。

    ListIterator<E> listIterator()

将如上的代码进行修改:

 package test09;

 import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator; public class List_It {
public static void main(String...args){
op_It();
}
public static void op_It(){
List<String> str_list=new ArrayList<>();
str_list.add("i");
str_list.add("b");
str_list.add("n");
str_list.add("m");
ListIterator<String> str_it=str_list.listIterator();
while (str_it.hasNext()){
if(str_it.next().equals("m")){
str_it.add("");
}
}
System.out.print(str_list);
}
}

在迭代的过程中,如果不想不引起并发异常,可以使用ListIterator迭代器,在迭代的过程对数组的修改。只有List有这特性,因为List有索引。

最新文章

  1. WebSocket与消息推送
  2. 限制input只能输入金额(类似:100.00|100.9|100)
  3. 启用https协议的方法
  4. 0006 《SQL必知必会》笔记02-计算字段与函数
  5. 转 -- linux IO子系统和文件系统读写流程
  6. 转:安装MySQL遇到MySQL Server Instance Configuration Wizard未响应的解决办法
  7. 外联css及js的使用
  8. Android性能优化方法(五)
  9. Undefined symbols for architecture i386:&quot;_OBJC_CLASS_$_xx&quot;, referenced from: 解决方法
  10. Problem 1007 幸运数 线段树成段更新
  11. Spring Autowiring @Qualifier example
  12. Beam me out!
  13. SO_REUSEADDR与SO_REUSEPORT平台差异性与测试
  14. MVC5 方法扩展
  15. C语言之运算符、表达式和语句
  16. XE5 Android 开发数据访问手机端 解决乱码的办法 [转]
  17. mysql每天凌晨0点准时启动taskeng.exe如何关闭
  18. ajax 遍历json一维数组
  19. VB.NET条码机打印设置纸张大小的方法
  20. Mac下完全删除GarageBand

热门文章

  1. XML序列化与REST WCF Data Contract匹配时遇到的2个问题
  2. java图形用户界面之列表框
  3. c#如何判断两个对象是否相等
  4. Django REST Framework应用
  5. javaSE——字节流
  6. Java基础学习—思维导图
  7. React-Native开发之BUG 总结
  8. android:项目迁移error:Please change caller according to com.intellij.....
  9. netty发送和接收数据handler处理器
  10. SQL Server 索引知识-概念