集合框架

集合框架

集合类的特点:提供了一种存储空间可变的存储模型,存储的数量容器可以随便发生改变。

collection单列集合

集合层次结构中的根界面。集合表示一组被称为其元素的对象。一些集合元素允许重复元素,而其他集合不允许。有些被命令和其他无序,jdk不提供此接口的任何直接实现,它提供了更具体的子接口实现,如set和list。该界面通常用于传递集合,并在需要最大的通用性的情况下对其进行操作。

collection集合

  • 是单例集合的顶层接口,它表示一组对象,这些对象也成为Collection的元素
  • jdk不提供此接口的任何直接实现,它提供了更具体的子接口实现

创建collection集合的对象

  • 多态的方式

  • 具体的实现类ArrayList

  • package xiao;
    
    import java.util.ArrayList;
    import java.util.Collection;
    
    /**
     * 创建collection集合的对象
     * 多态的方式
     * Arraylist()
     */
    public class CollectionDemo01 {
        public static void main(String[] args) {
            //创建collection集合的对象
            Collection<String> c = new ArrayList<String>();
    
            //添加元素,boolean add = (E e)
            c.add("hello");
            c.add("world");
    
            System.out.println(c);
    
        }
    }
    

collection常用方法

package xiao;

import java.util.ArrayList;
import java.util.Collection;
//alt+7  打开一个窗口,能够看到类的所有信息
public class CollectionDemo02 {
    public static void main(String[] args) {

        //创建集合对象
        Collection<String> c = new ArrayList<String>();
        //boolean add(E e)添加集合
//        System.out.println(c.add("hello"));
//        System.out.println(c.add("world"));
//        System.out.println(c.add("world"));
        c.add("hello");
        c.add("world");
        c.add("world");

        //boolean remove(Object o)从集合中移除指定的元素
       // System.out.println(c.remove("world"));
 //       System.out.println(c.remove("javee"));

        //void clear():清空集合中的元素
        //c.clear();

        //boolean contains(Object o);判断集合中是否存在指定的元素
       // System.out.println(c.contains("world"));

        //boolean isEmpty():判断集合是否为空
       // System.out.println(c.isEmpty());

        //int size():集合的长度,也就是集合中元素的个数
        System.out.println(c.size());


        //输出集合对象
        System.out.println(c);
    }

}

collection集合的遍历

iterator:迭代器,集合的专用遍历

  • iterator iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到

  • 迭代器是通过集合的iterator()方法得到的,所以我们说它是依赖于集合而存在的。

  • Iterator iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到

  • boolean hasNext();如果迭代具有更多元素,则返回true

package xiao;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class IteratorDemo {
    public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("hello");
        c.add("world");
        c.add("java");

        //Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
        Iterator<String> it = c.iterator();
        //E next():返回迭代中的下一个元素
//        System.out.println(it.next());
//        System.out.println(it.next());
//        System.out.println(it.next());

        //boolean hasNext();如果迭代具有更多元素,则返回true
//        if (it.hasNext()){
//            System.out.println(it.next());
//        }
//        if (it.hasNext()){
//            System.out.println(it.next());
//        }
//        if (it.hasNext()){
//            System.out.println(it.next());
//        }
//        if (it.hasNext()){
//            System.out.println(it.next());
//        }
        //用while循环改进拍断
        while (it.hasNext()){
     //       System.out.println(it.next());
            String s = it.next();
            System.out.println(s);
        }

    }


}

案例:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历集合

思路:

  1. 定义学生类

  2. 创建Collection集合对象

  3. 创建学生对象

  4. 把学生添加到集合

  5. 遍历集合(迭代器方式)

    package com.xiao;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class Demo111 {
        public static void main(String[] args) {
            //创建Collection集合对象
            Collection<Student> c = new ArrayList<Student>();
            //创建学生对象
            Student s1 = new Student("小明",12);
            Student s2 = new Student("小红",13);
            Student s3 = new Student("小白",33);
            //把学生添加到集合
            c.add(s1);
            c.add(s2);
            c.add(s3);
            //遍历集合
            Iterator<Student> it = c.iterator();
            while (it.hasNext()){
                Student s = it.next();
                System.out.println(s.getName() + "," + s.getAge());
            }
    
        }
    }
    
package com.xiao;

public class Student {
    private String name;
    private int age;

    public Student(){

    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

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

List集合

list集合概序:

  • 有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素。
  • 与set集合不同,列表通常允许重复的元素

list集合特点

  • 有序,存储和取出的元素顺序一致
  • 可重复,存储的元素可以重复
package com.xiao;

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

public class ListDemo01 {
    public static void main(String[] args) {
        //创建集合对象
        List<String> list = new ArrayList<>();
        //添加元素
        list.add("hello");
        list.add("world");
        list.add("java");
        list.add("world");
        //输出集合对象
  //      System.out.println(list);
        //采用迭代器的方式遍历
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
    }
}

案例:list集合存储学生对象并遍历

package com.xiao;

import java.nio.file.Watchable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListDemo01 {
    public static void main(String[] args) {
        //创建集合对象
        List<Student> list = new ArrayList<Student>();
        Student s1 = new Student("小明",12);
        Student s2 = new Student("小明1",14);
        Student s3 = new Student("小明2",1);

        list.add(s1);
        list.add(s2);
        list.add(s3);
        //while循环
        Iterator<Student> it = list.iterator();
        while (it.hasNext()){
            Student s = it.next();
            System.out.println(s.getName() + s.getAge());
        }
        //for循环
        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            System.out.println(s.getName() + s.getAge());
        }
    }
    }

并发修改异常

开发修改异常

ConcurrenModiflcationException

产生的原因:迭代器遍历过程中,通过集合对象修改了集合中元素的长度,造成了迭代器获取元素中判断期修改值和实际修改值不一致。

package com.xiao;

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

public class ListDemo {
    public static void main(String[] args) {
        //创建集合对象
        List<String> list = new ArrayList<>();

        //添加元素
        list.add("hello");
        list.add("world");
        list.add("java");
        //遍历集合
//        Iterator<String> it = list.iterator();
//        while (it.hasNext()){
//            String s = it.next();
//            if (s.equals("world")){
//                list.add("javaeeR");
        for (int i = 0; i < list.size(); i++) {
                String s = list.get(i);
                if (s.equals("world")){
                    list.add("javaee");
                }
        }
        System.out.println(list);
            }
        }

Listlterator

listlterator:列表迭代器

  • 通过list集合的listIterator()方法得到,所以说它是list集合特有的迭代器
  • 用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置

listlterator中的方法:

  • E next();返回迭代中的下一个元素

  • boolean hasNext():如果迭代具有更多元素,则返回true

  • E previous():返回列表中的还是那个一个元素

  • boolean hasPrevious():如果此列表迭代器在相反方向遍历列表时具有更多元素,则返回true

  • void add(E e):将指定的元素插入列表

  • package com.xiao;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.ListIterator;
    
    public class ListIteratorDemo {
        public static void main(String[] args) {
            //创建集合对象
            List<String> list = new ArrayList<>();
    
            //添加元素
            list.add("hello");
            list.add("world");
            list.add("java");
            //通过list集合的listIterator()方法得到,所以说它是list集合特有的迭代器
    //        ListIterator<String> lis = list.listIterator();
    //        while (lis.hasNext()){
    //            String s = lis.next();
    //            System.out.println(s);
    //        }
    //        System.out.println("---------------");
    //        //逆向遍历
    //        while (lis.hasPrevious()){
    //            String s = lis.previous();
    //            System.out.println(s);
    //        }
    
            //获取列表迭代器
            ListIterator<String> lit = list.listIterator();
            while (lit.hasNext()){
                String s = lit.next();
                if (s.equals("world")){
                    lit.add("javaee");
                }
            }
            System.out.println(list);
    
    
        }
    }
    

    增强for循环‘

    增强for:简化数组和Collection集合的遍历

    • 实现iterable接口的类允许其对象成为增强for语句的目标
    • 他是jdk5之后出现的,其内部原理是一个iterator迭代器

    增强for的格式

    • 格式:

    for(元素数据类型变量名:数组或者collection集合)「

    //此处使用变量即可,该变量就是元素

package com.xiao;

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

public class ForDemo {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        for (int i : arr){
            System.out.println(i);
        }

        String[] strArray = {"hello", "awdk", "dawdk"};
        for (String s: strArray){
            System.out.println(s);
        }

        ArrayList<String> ar1= new ArrayList<>();
        ar1.add("wadaw");
        ar1.add("wdfsdadaw");
        ar1.add("wadfacaw");
        for (String q:ar1
             ) {
            System.out.println(q);
        }
    }
}

案例:List集合存储学生对象用三种方式遍历

package com.xiao;

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

public class ListDemo3 {
    public static void main(String[] args) {
        ArrayList<Student> str = new ArrayList<Student>();
        Student s1 = new Student("小明", 12);
        Student s2 = new Student("小1", 14);
        Student s3 = new Student("小2", 13);
        str.add(s1);
        str.add(s2);
        str.add(s3);
        ListIterator<Student> l1 = str.listIterator();
        while (l1.hasNext()){
            Student s = l1.next();
            System.out.println(s.getName()+s.getAge());
        }


        for (int i = 0;i<str.size();i++){
            Student s = str.get(i);
            System.out.println(s.getName()+s.getAge());
        }

        for (Student s: str){
            System.out.println(s.getName()+s.getAge());
        }

    }
}

list数据结构

栈和队列

数据结构是计算机存储,组织数据的方式。使之相互之间存在一种或多种特定关系的数据元素的集合

通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。

  • 栈是一种数据先进后出的模型

  • 队列是一种数据先进先出的模型

数组

数组是一种查询快,增删慢的模型

  • 查询数据通过索引定位,查询任意数据耗时相同,查询效率高。

  • 删除数据时,要将原始数据删除,同时后面每个数据前移,删除效率低

  • 添加数据时,添加为之后的每个数据后移,在添加元素,添加效率极低

链表

  • 链表是一种增删快的模型(对比数组)
  • 链表是一种查询慢的模型(对比数组)

list集合子类特点

list集合常用子类:ArrayList(数组)、LinkedList(链表)

练习:分别使用ArrayList和LinkedList完成存储字符串并遍历

package com.xiao;

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

public class ListDemo1 {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<String> array = new ArrayList<>();
        array.add("dawdw");
        array.add("dawdgdrgdw");
        array.add("dawdawd");

        //遍历
        for (int i = 0; i < array.size(); i++) {
            String s = array.get(i);
            System.out.println(s);
        }

        for (String s: array
             ) {
            System.out.println(s);
        }


        ListIterator<String> arry = array.listIterator();
        while (arry.hasNext()){
            String s = arry.next();
            System.out.println(s);
        }

        LinkedList<String> array1 = new LinkedList<>();
        for (String s: array
             ) {
            System.out.println(s);
        }

        for (int i = 0; i < array.size(); i++) {
            String s = array.get(i);
            System.out.println(s);
        }
        ListIterator<String> arra1 = array1.listIterator();
        while (arra1.hasNext()){
            String s = arra1.next();
            System.out.println(s);
        }


    }
}

LinkedList集合的特有功能

package com.xiao;

import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();
        list.add("dadaw");
        list.add("dadaw");
        list.add("dadaw");
        //在该刘表开头拆入制定元素
        //将指定的元素追加到此列表的末尾
//        list.addFirst("javaee");
//        list.addLast("11111");
//        System.out.println(list);
        //返回此列表中的第一个元素
        //返回此列表的最后一个元素
        System.out.println(list.getFirst());
        System.out.println(list.getLast());
        System.out.println(list);
        //从此列表中删除并返回第一个元素
        //从此列表中删除并返回最后一个元素
        System.out.println(list.removeFirst());
        System.out.println(list.removeLast());
        System.out.println(list);
    }
}

set集合

set集合特点:

  • 不包含重复元素的集合
  • 没有带索引的方法,所以不能使用普通for循环遍历

set集合联系

  • 存储字符串并遍历
package com.xiao;

import java.util.HashSet;

public class Setdemo {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("dwad");
        set.add("dwaawdawdd");
        set.add("dwaawdawddwadadaw");

        for (String s :set
             ) {
            System.out.println(s);
        }
    }
}

哈希值

哈希值:是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值

Object类中有一个方法可以获取对象的哈希值

  • public int hasCode();返回对象的哈希值

特点:

  • 同一个对象多次调用hashcode()方法返回的哈希值是相同的

  • 默认情况下不同对象的哈希值是不相同的,通过方法重写,可以实现不同对象的哈希值是相同的

  • package com.xiao;
    
    public class HasDemo {
        public static void main(String[] args) {
            Student s1 = new Student("小明2",11);
            //同一个对象多次调用hascode方法返回的值是一样的
            System.out.println(s1.hashCode());
            System.out.println(s1.hashCode());
    
            //默认情况下不同对象的哈希值是不相同的
            //通过方法重写,可以实现不同对象的哈希值是相同的
            Student s2 = new Student("小明2",11);
            System.out.println(s2.hashCode());
    
            System.out.println("hello".hashCode());
            System.out.println("world".hashCode());
            System.out.println("java".hashCode());
    
    
            System.out.println("重地".hashCode());
            System.out.println("通话".hashCode());
    
        }
    }
    

HashSet集合概述和特点

  • 底层数据结构是哈希表
  • 对集合的迭代顺序不做任何保证,也就是说不保证存储和取出的元素顺序一样
  • 没有带索引的方法,所以不能使用普通for循环遍历
  • 由于是set集合,所以是不包含重复元素的集合

hashset集合练习,存储字符串并遍历:

package com.xiao;

import java.util.HashSet;

public class HashCode {
    public static void main(String[] args) {
        //创建集合对象
        HashSet<String> hs = new HashSet<>();
        hs.add("sdasd");
        hs.add("sdasdasdasd");
        hs.add("sdasdasdasdawdwad");

        hs.add("sdasd");
        for (String s : hs
             ) {
            System.out.println(s);
        }
    }
}

哈希表

  • jdk8之前,底层采用“数组”+“链表”实现。可以说是一个元素为链表的数组
  • jdk8之后,在长度比较长的时候,底层实现了优化

LinkedHashSet集合特点

  • 哈希表和链表实现的借口,具有可预测的迭代为序
  • 由链表保证元素有序,也就是说元素的存储和取出的顺序是一致的
  • 由哈希表办证元素唯一,也就是说没有重复的元素

likedhashset集合练习

  • 存储字符串并遍历

  • package com.xiao;
    
    import java.util.HashSet;
    import java.util.LinkedHashSet;
    
    public class HashCode {
        public static void main(String[] args) {
            //创建集合对象
            LinkedHashSet<String> link = new LinkedHashSet<>();
            link.add("dawd");
            link.add("dawdawdaw");
            link.add("dawdawdawawdaw");
            link.add("dawdawdawawdaw");
            for (String s:link
                 ) {
                System.out.println(s);
            }
    
    
        }
    }
    

TreeSet集合概述和特点

  • 元素有序,这里的顺序不是指的存储和取出顺序,而是按照一定的规矩进行排序,具体排序方法取决于构造方法
    • TreeSet();根据其元素的自然排序进行排序
    • TreeSer(Comparator comparator):根据指定的比较器进行排序
  • 没有带索引的方法,所以不能使用普通for循环遍历
  • 由于是set集合,所以不包含重复元素的集合

TreeSet集合练习:

  • 存储整数并遍历
package com.xiao;

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.TreeSet;

public class HashCode {
    public static void main(String[] args) {
        //创建集合对象
        TreeSet<Integer> treeSet = new TreeSet<>();
        treeSet.add(12);
        treeSet.add(22);
        treeSet.add(14);
        treeSet.add(14);
        treeSet.add(30);
        for (Integer i:treeSet
             ) {
            System.out.println(i);
        }
    }
}

自然排序Comparable的使用

  • 存储学生对象并遍历,创建TreeSet集合使用无参构造
  • 要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序

结论:

  • 用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的

  • 自然排序,就是让元素所属的类实现Comparable接口,重写comparaTo(To)方法

  • 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写

  • package com.xiao;
    
    import apple.laf.JRSUIUtils;
    
    import java.util.HashSet;
    import java.util.LinkedHashSet;
    import java.util.TreeSet;
    
    public class HashCode {
        public static void main(String[] args) {
            //创建集合对象
            TreeSet<Student> ts = new TreeSet<>();
            Student student1 = new Student("西施",30);
            Student student2 = new Student("王昭君",20);
            Student student3 = new Student("貂蝉",10);
            Student student4 = new Student("杨玉环",19);
            Student student5 = new Student("林青霞",19);
            ts.add(student1);
            ts.add(student2);
            ts.add(student3);
            ts.add(student4);
            ts.add(student5);
            for (Student s:ts
                 ) {
                System.out.println(s.getName()+s.getAge());
            }
        }
    }
    
package com.xiao;

public class Student implements Comparable<Student>{
    private String name;
    private int age;

    public Student(){

    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

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

    @Override
    public int compareTo(Student o) {
//        return -1;
//        return 1;
//        return 0;
        //按照年龄从小到达排序
        int num = this.age - o.age;
//        int num= o.age - this.age;
        int num2 = num == 0? this.name.compareTo(o.name):num;
       return num2;
    }
}

Map集合该序和使用

  • interface Map<K,V> K:键的类型 V:值的类型

  • 将键映射到值的对象;不能包含重复的键;每个键可以映射到最多一个值

  • package com.xiao;
    
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.TreeSet;
    
    public class Demo01 {
        public static void main(String[] args) {
            //创建集合对象
            Map<String,String> map = new HashMap<String,String>();
            map.put("itheriwad001","小明");
            map.put("itheriwad002","小标");
            map.put("itheriwad003","小如");
            map.put("itheriwad003","小哦");//第二次出现就修改之前的数据
            System.out.println(map);
        }
    }
    

Map集合基本功能

package com.xiao;

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet;

public class Demo01 {
    public static void main(String[] args) {
        //创建集合对象
        HashMap<String, String> map = new HashMap<>();
        //添加
        map.put("附加","1");
        map.put("郭靖","黄蓉");
        map.put("杨过","小龙女");
        //根据键删除键值对元素
       // System.out.println(map.remove("郭靖"));
//        System.out.println(map.remove("国祥"));
        //移除所有的键值对元素
        //map.clear();
//        //判断集合是否还包含指定的键
//        System.out.println(map.containsKey("杨过"));
//        System.out.println(map.containsKey("过"));
        //判断集合是否包含指定的值
       // System.out.println(map.containsValue("1"));
        //判断集合是否为空
       // System.out.println(map.isEmpty());
        //集合的长度,也就是集合中键值对的个数
        System.out.println(map.size());
        System.out.println(map);


    }
}

map集合的获取功能

package com.xiao;

import java.util.*;

public class Demo01 {
    public static void main(String[] args) {
        //创建集合对象
        HashMap<String, String> map = new HashMap<>();
        map.put("1","4");
        map.put("2","5");
        map.put("3","6");
        //根据键获取值
//        System.out.println(map.get("2"));
//        System.out.println(map.get("7"));
        //获取所有键的集合
//        Set<String> keyset = map.keySet();
//        for (String s:keyset
//             ) {
//            System.out.println(s);
//        }
        //获取所有值的集合
//        Collection<String> values = map.values();
//        for (String v:values
//             ) {
//            System.out.println(v);
//        }
        
    }
}

Map集合的遍历(方式一)

遍历思路:

  • 获取所有键的集合,用keyset方法实现
  • 遍历键的集合,获取到每一个键,用增强for实现
  • 根据键去找值,用get(obejctkey)方法实现
package com.xiao;

import java.util.*;

public class Demo01 {
    public static void main(String[] args) {
        //创建集合对象
        HashMap<String, String> map = new HashMap<>();
        map.put("1","2");
        map.put("3","4");
        map.put("5","6");
        //获取所有键的集合,用keyset方法实现
        Set<String> keySet = map.keySet();
        for (String key:keySet
             ) {
            String value = map.get(key);
            System.out.println(key+value);
        }
    }
}

Map集合遍历(方式二)

遍历思路:

  • 获取map集合中队友键值对对象的集合

    • Set<Map.Entry<K,y> > entrySer():获取所有键值对对象的集合
  • 遍历键值对对象的集合,得到每一个键值对对象

    • 用增强for实现,得到每一个Map.Entry
  • 根据键值对对象获取键和值

    • 用getkey()得到键
    • 用getvalur() 得到值
package com.xiao;

import java.util.*;

public class Demo01 {
    public static void main(String[] args) {
        //创建集合对象
        HashMap<String, String> map = new HashMap<>();
        map.put("1","2");
        map.put("3","4");
        map.put("5","6");
        //获取map集合中队友键值对对象的集合
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        //遍历键值对对象的集合,得到每一个键值对对象
        for (Map.Entry<String, String> me : entrySet
             ) {//根据键值对对象获取键和值
            String key = me.getKey();
            String value = me.getValue();
            System.out.println(key+value);
        }
    }
}

ArrayList嵌套HashMap

案例:

package com.xiao;

import java.nio.charset.StandardCharsets;
import java.util.*;

public class Demo01 {
    public static void main(String[] args) {
        //创建ArrayList集合
        ArrayList<HashMap<String, String>> array = new ArrayList<>();
        //创建hashmap集合并添加
        HashMap<String, String> hm1 = new HashMap<>();
        hm1.put("1","2");
        hm1.put("3","4");
        array.add(hm1);

        HashMap<String, String> hm2 = new HashMap<>();
        hm1.put("5","6");
        hm1.put("7","8");
        array.add(hm2);

        HashMap<String, String> hm3 = new HashMap<>();
        hm1.put("a","b");
        hm1.put("c","d");
        array.add(hm3);


        for (HashMap<String, String> hm:array) {
            Set<String> keySet = hm.keySet();
            for (String ket:keySet
                 ) {
                String value = hm1.get(ket);
                System.out.println(ket+"," + value);
            }
        }


    }
}
posted @ 2021-05-17 14:34  期待aaa  阅读(149)  评论(0)    收藏  举报