【188天】黑马程序员27天视频学习笔记【Day15-下】

本文深入探讨了Java集合框架中的核心概念,包括并发修改异常的原因及其解决方案、ListIterator的使用技巧、Vector与ArrayList的区别,以及不同集合类的选择依据。通过具体示例展示了如何避免并发修改异常,并比较了数组和链表的数据结构特性。

叨逼叨两句

  1. 如果现在让你心情惆怅的事,能在你踏实的行动下解决,那你的惆怅是不是在浪费时间?
  2. 语言的力量,往往让人能够画地为牢,所以千万不要说写听任何使自己觉得自己不行的话,防止自证预言把自己带进沟里。
  3. 当然,也不能就完全脱离现实规律,楼得一阶一阶上,事得一件一件干。

15-11:并发修改异常产生的原因及解决方案

这个视频再看一遍【15-11】

package com.test.regex;

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

public class Demo23 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("a");
        list.add("b");
        list.add("world");
        list.add("c");
        list.add("d");
        list.add("e");
        
        /*Iterator it = list.iterator();
        while(it.hasNext()){
            String str =(String) it.next();
            if("world".equals(str)){
                list.add("javaee");                
                //并发修改异常,java.util.ConcurrentModificationException
                //list使用迭代器Iterator时,不能用自己的方法去添加元素
            }
        }*/
        
        ListIterator lit = list.listIterator();  //使用这个List特有的迭代器可解决这个问题
        while(lit.hasNext()){
            String str = (String) lit.next();
            if("world".equals(str)){
            //    list.add("javaee"); //光使用ListIterator这个迭代器是不够的,还得使用它的方法
                lit.add("javaee");
            }
        }
        System.out.println(list);
        
    }
}

15-12:ListIterator

package com.test.regex;

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

public class Demo23 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("a");
        list.add("b");
        list.add("world");
        list.add("c");
        list.add("d");
        list.add("e");
        
        ListIterator lit = list.listIterator();
        while(lit.hasNext()){
            System.out.println(lit.next());    //获取指针,并将指针向后移动
        }
        
        System.out.println("----------------------------");
        
        while(lit.hasPrevious()){
            System.out.println(lit.previous());        //获取指针,并将指针向前移动
        }
        
    }
}

15-13:Vector

这个类基本被ArrayList取代了

package com.test.regex;

import java.util.Enumeration;
import java.util.Vector;

public class Demo24 {
    public static void main(String[] args) {
        Vector v = new Vector();
        v.addElement("a");
        v.addElement("b");
        v.addElement("c");
        v.addElement("d");
    
        Enumeration en = v.elements();        //获取枚举
        while(en.hasMoreElements()){            //判断集合中是否有元素
            System.out.println(en.nextElement());            //获取集合中的元素
        }
        
    }
}

15-14:数据结构之数组和链表【再看一遍视频】

  1. 数组:查询快、增删慢
    1
  2. 链表:查询慢、增删快
    2

15-15:List三个子类特点

特点

  1. ArrayList

    1. 底层数据结构——数组
    2. 线程不安全、效率高
  2. LinkedList

    1. 底层数据结构——链表
    2. 线程不安全、效率高
  3. Vector

    1. 底层数据结构——数组
    2. 线程安全、效率低

Vector相对ArrayList查询慢(线程安全)
Vector相对LinkList增删慢(数组结构)

应用选择

  1. 查询多用ArrayList
  2. 增删多用LinkList
  3. 如果都多用ArrayList
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值