List集合和List集合特有的功能,常见数据结构及其特点

List集合的概述及特点:

              元素有序,并且每一个元素都存在一个索引.元素可以重复。

List集合特有的功能:
              void add(int index,E element):    在指定索引处添加元素
              E remove(int index):移除指定索引处的元素  返回的是移除的元素
              E get(int index):获取指定索引处的元素
              E set(int index,E element):更改指定索引处的元素 返回的而是被替换的元素

List特有功能的举例:

package org.westos.Demo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Demo {

    public static void main(String[] args) {
        // void add(int index,E element): 在指定索引处添加元素
        // E remove(int index):移除指定索引处的元素 返回的是移除的元素
        // E get(int index):获取指定索引处的元素
        List list = new ArrayList();//创建一个List集合

        list.add(1);
        list.add(2);
        list.add(3);
        // void add(int index,E element)
        list.add(0, 10);
        //遍历集合
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
        // E remove(int index)
        Integer remove = (Integer) list.remove(0);
        System.out.println("被移除的元素:"+remove);
        System.out.println(list);
        //E get(int index)
        System.out.println(list.get(list.size() - 1));

    }

}

List特有的迭代器ListIterator(列表迭代器):

           ListIterator的特有功能
                           boolean hasPrevious():是否存在前一个元素
                           E previous():返回列表中的前一个元素

                          以上两个方法可以实现反向遍历 但是注意 要完成反向遍历之前 要先进行正向遍历  这样指针才能移到最后
        如果直接反向遍历是没有效果的  因为指针默认位置就在最前面 他前面没有元素

List集合元素的遍历方式:

          List集合元素的遍历方式有三种:

                      1 用父接口中的iterator()获取迭代器,用迭代器中的hasNext() 和next()方法来进行遍历

                      2 ListIterator获取迭代器,用迭代器中的的hasNext() 和next()方法来进行遍历来遍历。方法1同理。

扫描二维码关注公众号,回复: 2527729 查看本文章

                      2 通过自己本身的size()方法和get方法来进行遍历。

     

三种遍历方式以及反向遍历的举例:

package org.westos.Demo;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

//测试类
public class Demo2 {
    //主方法
    public static void main(String[] args) {
        List list = new ArrayList();//创建一个list集合
        Student s1 = new Student("小米", 21);//创建4个学生类对象
        Student s2 = new Student("小明", 22);
        Student s3 = new Student("小华", 24);
        Student s4 = new Student("小涛", 23);
        list.add(s1);//将四个学生对象放到集合中
        list.add(s2);
        list.add(s3);
        list.add(s4);
        bianli(list);//调用遍历方法
    }

    //遍历方法
    public static void bianli(List list) {
        Iterator iterator = list.iterator();//获取一个迭代器
        while (iterator.hasNext()) {//判断有没有下一个元素
            Student student = (Student) iterator.next();//将下一个元素拿出来向下转型

            System.out.println(student.getName() + "-----" + student.getAge());//打印
        }

        System.out.println("------------------------------------");

        ListIterator listIterator = list.listIterator();//获取一个列表迭代器

        while (listIterator.hasNext()) {//判断有没有下一个元素
            Student student1 = (Student) listIterator.next();//将下一个元素拿出来向下转型
            System.out.println(student1.getName() + "------" + student1.getAge());//打印
        }

        System.out.println("-------------------------------------------");

        while (listIterator.hasPrevious()) {//判断有没有前一个元素
            Student student2 = (Student) listIterator.previous();//将前一个元素拿出来向下转型
            System.out.println(student2.getName() + "-----" + student2.getAge());//打印
        }

        System.out.println("---------------------------------------");

        for (int i = 0; i < list.size(); i++) {
            Student student3 = (Student) list.get(i);//用get()方法吧第i个元素拿出来向下转型
            System.out.println(student3.getName() + "------" + student3.getAge());
        }
    }
}

package org.westos.Demo;

public class Student {
    private String name;
    private  int age;
    //无参构造
    public Student() {
    }
    //有参构造
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //setXXX和getXXX方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    //重写toString方法
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

并发修改异常产生问题及其解决方法:

           需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素。


           ConcurrentModificationException(并发修改异常)出现;
                     我们用Iterator这个迭代器遍历采用hasNext方法和next方法,集合修改集合 会出现并发修改异常
           原因是我们的迭代依赖与集合 当我们往集合中添加好了元素之后 获取迭代器  那么迭代器已经知道了集合的元素个数
           这个时候你在遍历的时候又突然想给 集合里面加一个元素(用的是集合的add方法) 那迭代器不同意 就报错了
    

          解决方案 :我们用ListIterator迭代器遍历 用迭代器自带的add方法添加元素 那就不会报错了
                  a:迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)
                  b:集合遍历元素,集合修改元素

          解决方案2 使用for循环遍历集合 添加元素 不会报错

package org.westos.demo2;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListDemo5 {

	public static void main(String[] args) {
//		A:案例演示
//		需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
		List<String> arrayList = new ArrayList<String>();
		arrayList.add("hello");
		arrayList.add("world");
		ListIterator<String> iterator = arrayList.listIterator();
		while (iterator.hasNext()) {
			String ele = iterator.next();
			if("world".equals(ele)) {
				//arrayList.add("javaee"); // ConcurrentModificationException 并发修改异常
				iterator.add("javaee");//用迭代器的添加方法
			}
			
		}
		
		System.out.println(arrayList);
		
		//为什么会出现并发修改异常:我现在用的是迭代器,进行遍历,在遍历之前,迭代器已经知道了,你集合中的所有元素
		//然后你在迭代的过程当中,突然间想要添加一个元素,迭代器肯定加不进去的
		//解决方案1:用迭代器中的添加方法
		
		//解决方法2 用for 进行遍历
		for(int i=0;i<arrayList.size();i++) {
			String ele = arrayList.get(i);
			if("world".equals(ele)) {
			arrayList.add("javaee"); // ConcurrentModificationException 并发修改异常
				
			}
		}
		
		System.out.println(arrayList);
		
		//set() 替换集合中指定索引处的元素,返回的是被替换的元素
		String set = arrayList.set(arrayList.size()-1, "JSP");
		System.out.println(set);
		System.out.println(arrayList);

	}

}

数据结构之栈和队列:

        数据结构概述及常见数据结构
                 数据结构其实就是存储数据的格式            分类:    栈 , 队列 , 数组 , 链表 , 树 , 哈希表
                 栈特点:     先进后出
                 队列:        先进先出

        数据结构之数组和链表:

                 数组特点:    查询快 , 增删慢
                 链表特点:    查询慢 , 增删快

猜你喜欢

转载自blog.csdn.net/qq_41942241/article/details/81367209