day15学习总结

一、List

1.List-ListIterator 的常用方法

2. 并发异常-ConcurrentModificationException

产生异常的原因:

        使用迭代器遍历的时候使用了集合的方法添加数据,集合修改数据后,迭代器并不知道集合修改了数据,所以就会发生并发异常

解决:

        A.使用迭代器遍历时,使用迭代器进行修改数据

        B.使用普通循环进行遍历,然后使用集合的方法修改数据

代码:

package com.qf.test.test01;

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

public class Test02 {
    public static void main(String[] args) {
        //实例化集合
        List li = new ArrayList();
        //给集合赋值
        li.add("阿陆");
        li.add("阿甘");
        li.add("黑福");
        /*//错误代码  会发生  并发异常
        //将集合转换为迭代器
        Iterator ii = li.iterator();
        //使用循环遍历
        while (ii.hasNext()){
            String s = (String) ii.next();
            if (s.equals("阿甘")){
                li.add("阿文");
            }
        }
        System.out.println(li);*/

        //解决方法 1  使用迭代器进行添加
        //将集合转换为List专属迭代器
       /* ListIterator itre = li.listIterator();
        //循环遍历
        while (itre.hasNext()){
            String s = (String) itre.next();
            if (s.equals("阿甘")){
                itre.add("阿文");
            }
        }
        System.out.println(li);
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++");*/
        //解决方法 2  使用普通for循环 用集合方法进行添加
        for (int i=0;i<li.size();i++){
            if (li.get(i).equals("阿甘")){
                li.add("阿文");
            }
        }
        System.out.println(li);
    }
}

二、ArrayList

1.简介

        ArrayList是List接口的实现类

2.特点:

        ArrayList底层结构是数组的数据结构,初始化容量为10,该数据结构的特点为:查询快,增删慢。

        ArrayList在多线程中是不同步的,所以在多线程中不安全

三、数据结构

1.数组结构

特点:查询快,增删慢。

2.栈结构

特点:先进后出

3.队列

特点:先进先出

4.链表

特点:查询慢,增删快。

 

四、案例

需求:

分析:

 

代码:

//工人类
package com.qf.test.test02;

public class Worker {
    //定义私有属性
    private String name;
    private int age;
    private double money;

    public Worker() {
    }

    public Worker(String name, int age, double money) {
        this.name = name;
        this.age = age;
        this.money = money;
    }

    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;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Worker{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", money=" + money +
                '}';
    }
}

//测试类
package com.qf.test.test02;

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

public class Test {
    public static void main(String[] args) {
        //实例化集合
        List li = new ArrayList();
        //将工人对象存入集合中
        li.add(new Worker("阿陆",20,3000));
        li.add(new Worker("阿甘",20,4000));
        li.add(new Worker("胡歌",20,6000));
        li.add(new Worker("大胡",20,5500));
        li.add(new Worker("黑福",20,2500));
        li.add(new Worker("小胡",20,3500));
        //循环遍历集合打印工人信息
        for (int i=0;i<li.size();i++){
            System.out.println(li.get(i));
        }
        System.out.println("===================================");
        //定义一个变量记录总数
        double sum = 0;
        //使用循环遍历集合
        for (int i=0;i<li.size();i++){
            Worker w = (Worker) li.get(i);
            sum += w.getMoney();
        }
        //输出平均工资
        System.out.println((int)(sum/li.size()));
        System.out.println("===================================");
        //打印名字中包含胡的
        for (int i=0;i<li.size();i++){
            Worker w = (Worker) li.get(i);
            if (w.getName().contains("胡")){
                System.out.println(w);
            }
        }
        System.out.println("===================================");
        //打印姓胡的
        for (int i=0;i<li.size();i++){
            Worker w = (Worker) li.get(i);
            if (w.getName().substring(0,1).equals("胡")){
                System.out.println(w);
            }
        }
        System.out.println("===================================");
        //键盘输入工人名字 判断是否有这个人
        //实例化Scanner
        Scanner input = new Scanner(System.in);
        System.out.println("请输入姓名");
        String name = input.next();
        //定义一个标记
        boolean flag = false;
        for (int i=0;i<li.size();i++){
            Worker w  = (Worker) li.get(i);
            if (w.getName().equals(name)){
                System.out.println(w);
                flag = true;
                break;
            }
        }
        if (!flag){
            System.out.println("查无此人");
        }
        System.out.println("===================================");
        //键盘录入工资 打印比此工资高的
        System.out.println("请输入工资");
        double pay = input.nextDouble();
        for (int i=0;i<li.size();i++){
            Worker w = (Worker) li.get(i);
            if (w.getMoney()>pay){
                System.out.println(w);
            }
        }
    }
}

五、LinkedList

1.简介

        LinkedList是List接口的实现类

        LinkedList是以链表的方式进行存储   

        LinkedList在多线程中是不同步的,所以在多线程中不安全

2.LinkedList独有的方法

六、Set
1.简介

        Set集合是一个接口,主要是实现类有HashSet类 TreeSet类

        特点:无序、没有索引 、元素不能重复

2.Set集合的遍历方式

        1.使用迭代器

        2.使用增强for循环

        只能使用这两种方式

七、案例

需求:

 分析:

代码:

package com.qf.test.test04;

import java.util.HashSet;
import java.util.Set;

public class Test02 {
    public static void main(String[] args) {
        //实例化集合
        Set set = new HashSet();
        //使用循环产生随机数并赋值给集合
        while (set.size()<10){
            int r = (int) (Math.random()*21+20);
            set.add(r);
        }
        System.out.println(set);
    }
}

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白昼乌龙茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值