2. list🦖
2.1 List 集合概述和特点🐶
List 集合概述:
有序集合(也称为序列),用户可以精确控制列表中的每一个元素插入位置,用户可以通过整数索引访问元素,并搜素列表中的元素
与Set集合不同,列表通常允许重复元素
List集合特点:
有序:存储和取出元素熟顺序一致‘’
-可重复:存储元素可以重复
public class List extends Component implements ItemSelectable, Accessible
List 组件为用户提供了一个可滚动的文本项列表。可设置此 list,使其允许用户进行单项或多项选择。
例如以下代码:
List lst = new List(4, false); lst.add("Mercury"); lst.add("Venus"); lst.add("Earth"); lst.add("JavaSoft"); lst.add("Mars"); lst.add("Jupiter"); lst.add("Saturn"); lst.add("Uranus"); lst.add("Neptune"); lst.add("Pluto"); cnt.add(lst);
当 cnt 为容器时,将生成以下滚动列表:
显示一个包含这些项的列表:Venus、Earth、JavaSoft 和 Mars。Javasoft 为选中状态。
如果 List 允许进行多项选择,则单击已选中的项时,将取消选中该项。在上面的示例中,一次只能从滚动列表中选择一项,因为创建新的滚动列表时,第二个参数为 false。如果 List 不允许进行多项选择,则选择某一项会导致其他选中的项取消选中。
注意,本示例中显示的列表是用四个可视行创建的。创建该列表之后,不可更改可视行的数量。默认的 List 是用四行创建的,所以 lst = new List() 与 list = new List(4, false) 等效。
代码示例:
import java.util.ArrayList; import java.util.Iterator; import java.util.List; /* List集合特点: - 有序:存储和取出元素熟顺序一致‘’ -可重复:存储元素可以重复 */ public class ListDemo01 { public static void main(String[] args) { ///创建集合对象 List<String> l = new ArrayList<String>(); l.add("hmm"); l.add("20"); l.add("20"); l.add("der"); //list集合继承collection,采用迭代器方法遍历集合 Iterator<String> it = l.iterator();//集合对象调方法l.iterator,alt +enter得到迭代器对象 while(it.hasNext()) {//判断集合是否有元素 String s = it.next();//获取元素 System.out.println(s); } // System.out.println(l); } }
2.2 List集合特有方法🦜
方法名 |
说明 |
void add(int index,E element) |
在集合中指定位置插入指定元素 |
E remove(int index) |
删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) |
修改指定索引处元素,返回被修改的元素 |
E get(int index) |
返回指定索引处的元素 |
import java.util.ArrayList; import java.util.List; //void add(int index,E element)|在集合中指定位置插入指定元素 //E remove(int index)|删除指定索引处的元素,返回被删除的元素 //E set(int index,E element)|修改指定索引处元素,返回被修改的元素 //E get(int index)|返回指定索引处的元素 public class ListDemo02 { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("hello"); list.add("world"); list.add("java"); //void add(int index,E element)|在集合中指定位置插入指定元素 //list.add(0,"hmm"); // list.add(5,"hm");IndexOutOfBoundsException: Index: 5, Size: 4 //E remove(int index)|删除指定索引处的元素,返回被删除的元素 //list.remove(2); //E set(int index,E element)|修改指定索引处元素,返回被修改的元素 //list.set(2,"python"); E get(int index)|返回指定索引处的元素 //System.out.println(list.get(1)); //输出集合 System.out.println(list); } }
2.3 并发修改异常🐢
并发修改异常
ConcurrentModificationException
产生原因
迭代器遍历过程中,通过集合对象中元素的长度,造成了迭代器获取元素中判断预期修改值与实际值不一致
解决方案
用for循环遍历,然后集合对象做对应的操作即可
总结:
不是不能修改,是迭代过程不能增加或者减少元素个数,set还是可以的
List集合是一个单独的参数,lterator迭代器也是一个单独的参数
lterator迭代器是依赖集合存在的,lterator迭代器参数具体内容是通过list方法获取的
也就跟复制粘贴一样,你原来的内容都通过add增加了内容
所以它实际是判断你生成迭代器后,原来的List集合的内容有被修改过没,不然就需要重新生成一次迭代器
2.4 ListIterator🐣
ListIterator:列表迭代器
通过List集合的ListIterator()方法得到,所以说它是list集合特有迭代器
系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。ListIterator 没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。长度为 n 的列表的迭代器有 n+1 个可能的指针位置,如下面的插入符举例说明:
Element(0) Element(1) Element(2) … Element(n-1) cursor positions: ^ ^ ^ ^ ^ import java.util.ArrayList; import java.util.List; import java.util.ListIterator; /* - 通过List集合的ListIterator()方法得到,所以说它是list集合特有迭代器 >==系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。ListIterator 没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。 */ public class ListIteratorDemo { public static void main(String[] args) { //创建集合对象 List<String> l = new ArrayList<String>(); //添加元素 l.add("hello"); l.add("world"); l.add("java"); /* //通过List集合的ListIterator()方法得到,所以说它是list集合特有迭代器 ListIterator<String> li = l.listIterator(); while(li.hasNext()) { String s = li.next(); System.out.println(s); } System.out.println("-----------------------"); // boolean hasPrevious() // 如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。 //ListIterator<String> lt1 = l.listIterator(); while(li.hasPrevious()) { String s1 = li.previous(); System.out.println(s1); }*/ //获取列表迭代器 ListIterator<String> li = l.listIterator(); while(li.hasNext()) { String s = li.next(); if(s.equals("world")){ li.add("javaee"); } } System.out.println(l); } }