文章目录
一个人的时候,在陌生的街头
抬头看着满天繁星的天空
一、List 集合
特点:有序(存储和取出的顺序一致),元素可以重复的
student s1 = new student("韭菜盒子",19);
student s2 = new student("KOKIA",18);
student s3 = new student("MACO",17);
List arr = new ArrayList();
((ArrayList) arr).add(s1);
((ArrayList) arr).add(s2);
((ArrayList) arr).add(s3);
Iterator i = arr.iterator();
while(i.hasNext()){
student s = (student) i.next();
System.out.println(s.toString());
}
特有功能
1.1 添加
void add(int index, Object element):将指定的元素插入此列表中的指定位置(可选操作)
index索引的范围是0-size()
类比排列组合的插板法
List l = new ArrayList();
l.add("fgh");
l.add("韭菜盒子");
l.add(1,"&");
System.out.println(l); // [fgh, &, 韭菜盒子]
1.2 删除
E remove(int index):删除该列表中指定位置的元素(可选操作)
返回的是被删除的那个元素
List l = new ArrayList();
l.add("fgh");
l.add("&");
l.add("韭菜盒子");
Object remove = l.remove(1);
System.out.println(l); // [fgh, 韭菜盒子]
System.out.println(remove); // &
1.3 获取
E get(int index):返回此列表中指定位置的元素
List l = new ArrayList();
l.add("fgh");
l.add("&");
l.add("韭菜盒子");
Object o = l.get(1);
System.out.println(l); // [fgh, &, 韭菜盒子]
System.out.println(o); // &
1.4 修改
E set(int index, Object element) 用指定的元素(可选操作)替换此列表中指定位置的元素
返回的是被修改的那个元素
List l = new ArrayList();
l.add("fgh");
l.add("&");
l.add("韭菜盒子");
Object set = l.set(1,"and");
System.out.println(l); // [fgh, and, 韭菜盒子]
System.out.println(set); // &
二、ArrayList 顺序表 LinkedList 双链表
ArrayList 顺序表
依托于索引的一种数据类型,查找快,增删慢
LinkedList 双链表
依托于指针域和值域的一种数据类型,查找慢,增删快
java 中的链表为双链表,同时存储前一元素地址和后一元素地址
LinkedList 特有功能
1.1 添加:
public void addFirst(Object obj) :在该集合开头插入指定的元素
public void addLast(Object obj) :将指定的元素追加到此列表的末尾
1.2 获取:
public Object getFirst() :返回此集合中的第一个元素
public Object getLast() :返回此列表中的最后一个元素
1.3 删除:
public Object removeFirst() :移除集合中第一个元素,返回被删除对象
public Object removeLast() :移除集合中最后一个元素,返回被删除对象
三、ListIterator 迭代器
ListIterator listIterator() :生成 List 迭代器
boolean hasNext() :判断下一元素指向地址是否为空
boolean hasPrevious() :判断上一元素指向地址是否为空
E next() :返回列表中的下一个元素,并且指针指向下一位置。末尾返回长度
int nextIndex() :返回随后调用 next() 返回的元素的索引,即下一对象
E previous() :返回列表中的上一个元素,并且指针指向上位置
int previousIndex() :返回由后续调用 previous() 返回的元素的索引,即当前对象。初识返回 -1
void remove() :删除当前指针指向元素
在迭代器遍历中,不能通过集合去修改元素
注:List 迭代器类似一个有头结点和尾结点的链表
......
ArrayList arr = new ArrayList();
arr.add("fgh");
arr.add("123");
arr.add("韭菜");
arr.add("盒子");
ListIterator li = arr.listIterator();
System.out.println(li.previousIndex());
while(li.hasNext()){
String s = (String) li.next();
if("123".equals(s)){
li.add("456");
}
if("盒子".equals(s)){
li.set("鸡蛋");
}
System.out.println(s);
}
System.out.println(li.nextIndex());
while(li.hasPrevious()){
String s = (String) li.previous();
System.out.println(s);
}
System.out.println(arr);
// -1 指针初始位置返回 previousIndex
// fgh 顺序遍历 并修改
// 123
// 韭菜
// 盒子
// 5 指针末尾位置返回 nextIndex
// 鸡蛋 你序遍历
// 韭菜
// 456
// 123
// fgh
//亦可使用传统 for() 循环
for(int i = 0; i < arr.size(); i++){
for(int i = 0; i < arr.size(); i++){
String s = (String) arr.get(i);
System.out.println(s);
}
总结
ListIterator 迭代器 和 Iterator 迭代器
1、Iterator 仅能通过 remove() 进行修改;ListIterator 包含 add()、set() 修改
2、Iterator 仅能实现向后的顺序遍历 next();ListIterator 可以实现向后和向前遍历 previous()
3、ListIterator可以定位当前的索引位置,nextIndex()和previousIndex(),Iterator 不可以