day16 Java List ArrayList LinkedList


一个人的时候,在陌生的街头
抬头看着满天繁星的天空






一、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 不可以

猜你喜欢

转载自blog.csdn.net/qq_41464008/article/details/120712768