【精通Java】集合类体系之List集合
原创
©著作权归作者所有:来自51CTO博客作者江岸畔的小鱼的原创作品,请联系作者获取转载授权,否则将追究法律责任
个人名片:
🐼作者简介:一名大一在校生 🐻❄️个人主页:小新爱学习. 🐼
🕊️系列专栏:零基础学java ----- 重识c语言
🐓每日一句:不要羡慕任何人,想要的自己去争取。
文章目录
- 2.1 List 集合概述和特点🐶
- 2.2 List集合特有方法🦜
- 2.3 并发修改异常🐢
- 2.4 ListIterator🐣
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
产生原因
- 迭代器遍历过程中,通过集合对象中元素的长度,造成了迭代器获取元素中判断预期修改值与实际值不一致
解决方案
总结:
不是不能修改,是迭代过程不能增加或者减少元素个数,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);
}
}