package jihe;
import java.util.*;
import stringbuffer.Sop;
/*
*Collection
* |-->List元素有序,且可以重复;因为该集合体系有索引;
* |--->ArrayList 数组结构 查询速度快,修改快,添加删除慢;线程不同步;默认情况下长度为10;每超过一次,new一个+50%长度的数组并复制数据;(可变长度数组)
* |--->LinkedList 链表数据结构 查询速度慢,修改慢,添加删除快;
* |--->Vector 数组结构 是ArrayList(1.2)的爸爸,出现的早(1.0);线程同步的;默认长度为10,每超过一次,new一个+100%长度的数组并复制数据;(可变长度数组)
* |--->
* |-->Set元素无序,元素不可以重复,该集合无索引;
List:
特有方法:凡是可以操作脚标的方法都是该体系特有方法。
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index);
subList(start,end);
listIterator();
List集合特有的迭代器listIterator是Iterator的子接口。
在普通迭代时用集合操作元素会发生并发修改异常,所以在迭代时只能用迭代器的方法操作元素,而Iterator只有remove,next,hasnext三个操作;
想要其他操作如添加和修改就需要使用其子接口:listIterator;该接口只能通过List集合的listIterator获取;
* */
public class ListDemo {
public static void method_normal(){
ArrayList al=new ArrayList();
al.add("lbr1");
al.add("lbr2");
al.add("lbr3");
al.add("lbr4");
Sop.print(al.toString());
ArrayList al1=new ArrayList();
al1.add("hh1");
al1.add("hh2");
al1.add("hh3");
al1.add("hh4");
al.add(1, "lwx1");
Sop.print(al.toString());
al.addAll(3, al1);
Sop.print(al);
al.remove(3);
Sop.print(al);
al.set(2, "bilibili");
Sop.print(al);
Sop.print(al.get(1));
Sop.print(al.subList(1, 3));
for(int i=0;i<al.size();i++)
{
Sop.print(al.get(i));
}
System.out.println();
List l2=al.subList(1, 3);//返回类型是List;
Sop.print(l2.toString());
}
public static void methodNormalInterator(){
ArrayList al=new ArrayList();
al.add("lbr1");
al.add("lbr2");
al.add("lbr3");
al.add("lbr4");
Sop.print(al.toString());
ArrayList al1=new ArrayList();
al1.add("hh1");
al1.add("hh2");
al1.add("hh3");
al1.add("hh4");
al.add(1, "lwx1");
al.addAll(3, al1);
al.set(2, "bilibili");
//****listIterator*****
//迭代过程中添加/删除元素;
Sop.print(al);
Iterator it=al.iterator();//迭代器只知道里面有8个元素
Object obj;
int num;
while(it.hasNext())
{
obj=it.next();
if(obj.equals("hh4"))
{
it.remove();
//al.add("=w=");//会返回java.util.ConcurrentModificationException错误;迭代操作过程中集合又同时操作了元素就会报错;(并发访问)
//并发修改异常;而普通叠加器无法进行添加操作;
Sop.print(obj);//迭代器删除了集合中的hh4的引用,但是元素还是存在的,而obj还指向该元素,所以还可以用obj来打印;
}
}
Sop.print(al);
Sop.print(al.indexOf("hh3"));
}
public static void method_ListIterator(){//在遍历过程中增删改查;set(M)>remove>add(M);注意顺序否则出现java.lang.IllegalStateException
ArrayList al=new ArrayList();
al.add("lbr1");
al.add("lbr2");
al.add("lbr3");
al.add("lbr4");
ArrayList al1=new ArrayList();
al1.add("hh1");
al1.add("hh2");
al1.add("hh3");
al1.add("hh4");
al.add(1, "lwx1");
al.addAll(3, al1);
al.set(2, "bilibili");
Sop.print(al.toString());
ListIterator li=al.listIterator();
Object obj;
while(li.hasNext()){
obj=li.next();//执行了next之后指针就会向后移动一次
if(obj.equals("hh3"))
{
//li.remove();//在remove之前必须要有next返回值,他才知道删除哪一个;只能出现在add之前,不能出现在add之后;
//li.add("=w=");//添加在当前指向的元素之后
/*
li.remove();//remove不能使用多次;
li.remove();
*/
/*
li.add("=w=!!!");
li.add("=w=....");//可以多次使用第二次添加的话就会在添加在第一次添加的值之后;
*/
li.set("=w=-----1");
li.set("=w=-----2");//set可以使用两次,都是对next返回值的修改,可与add/remove混用,但set必须出现在第一个;
li.remove();//可以用在set之后,不能用在set之前,否则set就不知道set哪一个了;
li.add("=w=-----3");
li.add("=w=-----4");
}
}
Sop.print(al.toString());
}
public static void main(String[] args) {
}
}