JAVA入门-集合与泛型

news2024/11/17 10:34:38

目录

一、集合体系结构

二、Collection单列集合

2.1 概述

2.2 基本方法与接口

2.3 遍历方式

2.3.1 迭代器遍历

2.3.2 增强for遍历

2.3.3 Lamda表达式遍历

三、List集合

3.1 ArrayList集合

3.2 LinkedList集合

四、泛型

4.1 泛型擦除

4.2 泛型使用

4.2.1 泛型类

4.2.2 泛型方法

4.2.3 泛型接口

4.3 泛型常见使用

4.3.1 tips

五、Set集合

5.1 HashSet与LinkedSet

5.1.1 HashSet的特性与原理

5.1.2 哈希表理解

5.1.3 LinkedSet

5.2 TreeSet

5.2.1 基本原理与特性

5.2.2 排序规则

六、Map双列集合

6.1 基本特性

6.2 基本方法与接口

6.3 Map遍历方式

6.3.1 键找值

6.3.2 键值对

6.3.3 Lamda表达式

6.4 HashMap


一、集合体系结构

单列集合(Collection父类)双列集合(Map父类)
一次添加一个一次添加一对
List、Set等HashMap等

二、Collection单列集合

2.1 概述

Collection是所有单列集合的父类,它提供了所有单列集合可实现的接口,其下有List和Set两个接口

List集合有三个实现子类,分别是ArrayList、LinkedList和Vector(Vector现已不再维护)

Set集合下有两个实现子类,分别是HashSet和TreeSet,HashSet下又有LinkedHashSet子类

849282a01b43487d9e7b8d42cb45df9a.png

2.2 基本方法与接口

add、clear、remove、contains、isEmpty、size

注意:contains方法在底层的实现中使用的是equals方法,所以如果元素是自定义对象,需要在Java Bean中重写equals方法进行判断

2.3 遍历方式

2.3.1 迭代器遍历

通过iterator方法获取迭代器对象,hasNext判断是否存在下一个元素,next方法获取下一个元素

不依赖索引的通用型遍历方式,可以用于删除元素

package MAP;

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

public class MyIterator {
    public static void main(String[] args) {
        ArrayList<String> l = new ArrayList<>();
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");
        Iterator<String> E = l.iterator();
        while (E.hasNext()) {
            String k = E.next();
            System.out.println(k);
            E.remove();
        }
    }
}

迭代器遍历完毕时,指针不会复位

循环中只能使用一个next方法

迭代器遍历时,不能使用集合的方法进增加或者删除,请使用迭代器的删除方法

2.3.2 增强for遍历

只适用所有的单列集合和数组,通常用于遍历

package MAP;

import java.util.ArrayList;

public class forList {
    public static void main(String[] args) {
        ArrayList<String> l = new ArrayList<>();
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");
        for (String str : l) {
            System.out.println(str);
        }
    }
}

2.3.3 Lamda表达式遍历

JDK8后的新特性,使用匿名内部类的底层原理,简化为Lamda表达式的形式,通常用于遍历

ArrayList<String> l = new ArrayList<>();
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");

        l.forEach(new Consumer<String>() {
            @Override
            public void accept(String t) {
                // TODO Auto-generated method stub
                System.out.println(t);
            }
        });

        l.forEach((String s) -> {
            System.out.println(s);
        });

三、List集合

特点:有序(取出元素时有排列顺序)、可重复、有索引、该接口可以使用for循环操作索引

接口通用方法:add、remove、set、get

3.1 ArrayList集合

底层原理:空参创造集合,生成长度为0的数组,当添加第一个元素时,生成一个长度为10的数组。当存满时,会创建一个长度为1.5倍的新数组。若一次添加多个元素,则新数组的长度根据实际变化。

3.2 LinkedList集合

底层原理:双向链表

常用方法:addFirst、addLast、getFirst、getLast、removeFirst、removeLast

四、泛型

JDK5后推出泛型,没有泛型时,集合可以存储多种类型数据,但都以object保存,无法使用某个具体类的特殊方法

4.1 泛型擦除

Java的泛型是伪泛型。在编译阶段,泛型会检查存入的数据类型。进入集合后,所有类型会变为Object类型

也就是说,Java泛型只是实现了在编码上的泛型,在.class文件中并没有真正的控制数据类型。意思就是,数据出入集合时会变为所控制的数据类型,而在进入集合后全部都会变为Object类型

泛型不能写基本数据类型,只能写引用数据类型,泛型可以传入子类类型

4.2 泛型使用

对数据类型使用参数进行表示,提供不确定数据类型的类、方法、接口。这种做法通常见于企业级开发中

4.2.1 泛型类

package MAP;

import java.util.Arrays;

public class MyArrayList<E> {
    Object[] array = new Object[10];
    int size;

    public boolean add(E e) {
        array[size] = e;
        size++;
        return true;
    }

    @SuppressWarnings("unchecked")
    public E get(int index) {
        return (E) array[index];
    }

    @Override
    public String toString() {
        return Arrays.toString(array) + ", size=" + size;
    }

    public static void main(String[] args) {
        MyArrayList<String> l = new MyArrayList<>();
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");
        System.out.println(l.get(0));
        System.out.println(l.toString());
    }
}

4.2.2 泛型方法

package MAP;

import java.util.ArrayList;

public class ListString {
    @SuppressWarnings("unchecked")
    public static <E> boolean addAll(ArrayList<E> list, E... e) {
        for (E element : e) {
            list.add(element);
        }
        return true;
    }

    public static void main(String[] args) {
        ArrayList<String> l = new ArrayList<>();
        ListString.addAll(l, "aaa", "bbb", "ccc");
        System.out.println(l);
    }
}

4.2.3 泛型接口

package MAP;

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

public class MyList<E> implements List<E> {
    public static void main(String[] args) {

    }

    @Override
    public int size() {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'size'");
    }

    @Override
    public boolean isEmpty() {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'isEmpty'");
    }

    @Override
    public boolean contains(Object o) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'contains'");
    }

    @Override
    public Iterator<E> iterator() {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'iterator'");
    }

    @Override
    public Object[] toArray() {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'toArray'");
    }

    @Override
    public <T> T[] toArray(T[] a) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'toArray'");
    }

    @Override
    public boolean add(E e) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'add'");
    }

    @Override
    public boolean remove(Object o) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'remove'");
    }

    @Override
    public boolean containsAll(Collection<?> c) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'containsAll'");
    }

    @Override
    public boolean addAll(Collection<? extends E> c) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'addAll'");
    }

    @Override
    public boolean addAll(int index, Collection<? extends E> c) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'addAll'");
    }

    @Override
    public boolean removeAll(Collection<?> c) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'removeAll'");
    }

    @Override
    public boolean retainAll(Collection<?> c) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'retainAll'");
    }

    @Override
    public void clear() {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'clear'");
    }

    @Override
    public E get(int index) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'get'");
    }

    @Override
    public E set(int index, E element) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'set'");
    }

    @Override
    public void add(int index, E element) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'add'");
    }

    @Override
    public E remove(int index) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'remove'");
    }

    @Override
    public int indexOf(Object o) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'indexOf'");
    }

    @Override
    public int lastIndexOf(Object o) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'lastIndexOf'");
    }

    @Override
    public ListIterator<E> listIterator() {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'listIterator'");
    }

    @Override
    public ListIterator<E> listIterator(int index) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'listIterator'");
    }

    @Override
    public List<E> subList(int fromIndex, int toIndex) {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'subList'");
    }
}

4.3 泛型常见使用

4.3.1 tips

泛型中写的是什么类型,就只能传递什么类型

可以用E参数泛型来表示不确定的泛型,但是这也表示其它所有类型的泛型数据都可以被传入使用

用?通配符也可以表示不确定性类型,但可以对类型进行限定

? extends E表示可以传递E或者E的子类类型

? super E表示可以传递E或者E的父类类型

该种做法不会导致报错)

package MAP;

import java.util.ArrayList;

public class MyE {
    class ye {
    }

    class fu extends ye {
    }

    class zi extends fu {
    }

    public static <E> void method(final ArrayList<? extends ye> e) {
    }

    public static void main(final String[] args) {
        final ArrayList<ye> y = new ArrayList<>();
        final ArrayList<fu> f = new ArrayList<>();
        final ArrayList<zi> z = new ArrayList<>();

        MyE.method(y);
        MyE.method(f);
        MyE.method(z);
    }
}

五、Set集合

特点:无序(存取顺序不一致)、不重复、无索引

与List的通用方法同理,可用迭代器、增强for循环、Lamda表达式进行遍历

5.1 HashSet与LinkedSet

5.1.1 HashSet的特性与原理

无序,不重复,无索引。底层使用哈希表(JDK8中使用数组+链表+红黑树)作为数据结构。其增删改查性能都比较好

无序:其底层使用数组+链表的模式,导致一个成型的哈希表有多种存入的方式,因此取出时不一定和存入时相同

不重复:利用hashcode和equls方法对元素进行比较

无索引:因为无序,所以无法定制索引

5.1.2 哈希表理解

哈希值:对象的整数表现形式

哈希值计算:JDK中使用hashcode计算对象的hash值,且通常使用到该对象的地址

哈希值特点:在没有重写方法的情况下,默认是不同的。在重写hashcode方法的情况下,相同属性值的哈希值是一样的。在特殊情况下,也会出现哈希值相同(哈希碰撞)

5.1.3 LinkedSet

有序,不重复,无索引

有序:LinkedSet使用了双链表,记录了每个元素的前后元素,因此有序

5.2 TreeSet

5.2.1 基本原理与特性

不重复、无索引、可排序

基于红黑树的数据结构实现排序,有由小到大的顺序

5.2.2 排序规则

在整型与浮动型中按照数字由小到大排序,在字符和字符串类型中以asc码大小进行排序

当传入的元素是自定义的对象时,会报错,因为没有匹配的排序规则,因此需要重新定义排序规则,有两种方法来实现这个功能。

第一种做法是需要使用自定义类实现comparable接口,并重写其中的抽象方法,其根据compareto的返回值正负来决定新添加的值插入的位置是在红黑树的左边还是右边

第二种做法是使用比较器对象进行排序

①使用自定义类实现comparable接口

package MAP;

import java.util.TreeSet;

public class MyTreeSet implements Comparable<MyTreeSet> {
    // 这是一棵名叫Hash的树
    private int age;
    private String name;

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "My name is " + this.name + " and My age is " + this.age;
    }

    @Override
    public int compareTo(MyTreeSet o) {

        return this.age - o.age;
    }

    public static void main(String[] args) {
        MyTreeSet tree_1 = new MyTreeSet(10, "小树");
        MyTreeSet tree_2 = new MyTreeSet(20, "成年树");
        MyTreeSet tree_3 = new MyTreeSet(50, "老年树");

        TreeSet<MyTreeSet> container = new TreeSet<MyTreeSet>();
        container.add(tree_1);
        container.add(tree_3);
        container.add(tree_2);

        for (MyTreeSet tree : container) {
            System.out.println(tree);
        }

    }

}

②比较器对象

package MAP;

import java.util.Comparator;
import java.util.TreeSet;

public class MyTreeSet2 {
    public static void main(String[] args) {
        // 排序要求:字符串排序,先按长度排序,长度一样按字母排序
        TreeSet<String> tree = new TreeSet<String>(new Comparator<String>() {
            public int compare(String o1, String o2) {
                int i = o1.length() - o2.length();
                /*
                 * 利用三元运算符
                 * 当i==0时,使用第一个表达式compareTo,当i!=0时,使用第二个表达式i的实际值
                 */
                i = i == 0 ? o1.compareTo(o2) : i;
                return i;
            }

        });
        tree.add("aaaaaaaaa");
        tree.add("aab");
        tree.add("abc");

        for (String te : tree) {
            System.out.println(te);
        }
    }
}

六、Map双列集合

6.1 基本特性

元素为键值对一对数据,也称为键值对对象(Entry对象)

键不能重复,值可以重复

键值一一对应,可通过键找到值

6.2 基本方法与接口

put、remove、containsKey、containsValue、isEmpty、Size、get

put在方法在有键值对的情况下会直接覆盖原值

6.3 Map遍历方式

6.3.1 键找值

通过得到键集合的方式,使用get方法结合单列集合遍历方式来遍历Map

package MAP;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class MyMap {
    public static void main(String[] args) {
        // 这是一个夫妻Map
        Map<String, String> couple = new HashMap<>();
        couple.put("郭靖", "黄蓉");
        couple.put("杨过", "小龙女");
        couple.put("杨康", "穆念慈");

        Set<String> keySet = new HashSet<>(couple.keySet());
        for (String string : keySet) {
            System.out.println(couple.get(string) + "是" + string + "的老婆");
        }
    }
}

6.3.2 键值对

通过EntrySet直接获取Entry对象。这里要注意Entry是Map中的接口,所以如果没有import,则需要带上引用

package MAP;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class MyMap {
    public static void main(String[] args) {
        // 这是一个夫妻Map
        Map<String, String> couple = new HashMap<>();
        couple.put("郭靖", "黄蓉");
        couple.put("杨过", "小龙女");
        couple.put("杨康", "穆念慈");

        Set<Map.Entry<String, String>> myEntry = couple.entrySet();
        for (Map.Entry<String, String> entry : myEntry) {
            System.out.println(entry.getValue() + "是" + entry.getKey() + "的老婆");
        }
    }
}

6.3.3 Lamda表达式

package MAP;

import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;

public class MyMap {
    public static void main(String[] args) {
        // 这是一个夫妻Map
        Map<String, String> couple = new HashMap<>();
        couple.put("郭靖", "黄蓉");
        couple.put("杨过", "小龙女");
        couple.put("杨康", "穆念慈");

        couple.forEach(new BiConsumer<String, String>() {
            @Override
            public void accept(String key, String value) {
                System.out.println(value + "是" + key + "的老婆");
            }
        });
        // 简写
        couple.forEach((key, value) -> System.out.println(value + "是" + key + "的老婆"));
    }
}

6.4 HashMap

HashMap是Map的实现类,继承了其中的所有方法且没有新的实现方法。其底层原理是Hash表,目前是使用最多的Map集合

如果自定义对象是键,则需要重写hasCode和equals方法。自定义对象是值则不需要

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2175809.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SPAD 单光子雪崩二极管

一、简介 SPAD&#xff0c;全称为Single Photon Avalanche Diode&#xff08;单光子雪崩二极管&#xff09;&#xff0c;是一种高灵敏度的光电探测器件&#xff0c;能够在非常低的光照水平下检测单个光子。SPAD在工作时&#xff0c;当一个光子被探测器吸收后&#xff0c;能够触…

如何高效搭建TEMU自养号测评系统?

TEMU全托管模式当前的优势在于其简化运营流程&#xff0c;允许卖家专注于产品选品与质量控制&#xff0c;而无需直接参与日常运营。然而&#xff0c;这一模式也限制了卖家在营销策略上的自主性&#xff0c;促使部分卖家采取自养号测评的方式&#xff0c;以增强产品链接的竞争力…

精通推荐算法32:行为序列建模总结

1 行为序列建模总体架构 2 行为序列整体总结 用户行为序列建模是推荐算法中至关重要的一环&#xff0c;也是目前较为核心和前沿的研究方向。其主要分为短序列建模和长序列建模两大方向。短序列建模又主要分为池化和序列化两种方式&#xff0c;其中池化包括Sum-Pooling、Averag…

828华为云征文 | 使用 Memtester 对华为云 X 实例进行内存性能测试

目录 前言 1 华为云X实例介绍 2 Memtester 简介 2.1 什么是Memtester 2.2 安装 Memtester 3 测试方案设计 3.1 测试目标 3.2 测试环境 3.3 测试命令 4 测试数据及性能分析 4.1 带宽测试结果 4.2 延迟测试结果 5 性能瓶颈与优化建议 6 总结 前言 在云计算的应用场…

Spring Boot 点餐系统:简化您的订餐流程

第五章 系统实现 5.1用户功能模块 用户点击进入到系统操作界面&#xff0c;可以对首页、个人中心、美食订单管理、美食评价管理、我的收藏管理等功能模块&#xff0c;个人信息&#xff1a;通过列表可以获取用户账号、用户姓名、性别、年龄、头像、用户手机、配送地址并进行修改…

Python入门:类的异步资源管理与回收( __del__ 方法中如何调用异步函数)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 使用上下文管理器📝 使用 `__del__` 方法📝 结合使用上下文管理器与 `__del__`📝 资源回收的重要性⚓️ 相关链接 ⚓️📖 介绍 📖 在编程中,资源的管理和回收至关重要,尤其是在处理网络请求时。频…

Linux三剑客对数据处理

grep配合正则表达式可以灵活的查找文本内容。 但是有些时候我们不仅仅需要找出数据&#xff0c;还需要按照一定的规则进行整合&#xff0c;格式化排列 文本文件内有一百条规范数据&#xff0c;如下&#xff1a; John Doe, 25, Engineer Alice Smith, 30, Data Scientist Bob …

不将“旧”,换新家电的门槛又被TCL拉低了

在不同的时代背景中&#xff0c;“新旧”两字所代表的消费含义在不断更迭。过去物质匮乏的年代&#xff0c;“新三年&#xff0c;旧三年&#xff0c;缝缝补补又三年”的俭朴消费观贯穿了国人的生活。随着经济发展&#xff0c;“旧的不去&#xff0c;新的不来”逐渐成为社会消费…

市场调研利器 网络问卷的优势及面临的挑战

网络问卷作为市场调研工具&#xff0c;高效便捷、成本低廉、数据准确度高且灵活多样。但其低响应率、数据偏差、隐私与安全及技术依赖等挑战也需关注。企业应优化调研方法&#xff0c;应对挑战&#xff0c;以获取全面市场信息。 一、网络问卷的优势 首先&#xff0c;我们来分析…

【频分复用】5G中OFDM和GFDM的比较(频谱效率、误码率、星座图、复杂度)【附MATLAB代码及报告】

微信公众号&#xff1a;EW Frontier QQ交流群&#xff1a;554073254 背景 5G需要满足低延迟、高数据速率、连接密度和其他应用需求&#xff0c;这些应用需要增强的移动的宽带、超可靠和低延迟连接以及海量机器类型连接[1]。这种通信所需的信道容量受到噪声、衰减、失真和符号间…

千亿大数据不为人知的数据库缺陷——中看不中用的设置——MySQL大数据优化

一、数据插入之后变了2147483647 在 MySQL 数据库的操作中&#xff0c;我们常常会遇到各种意想不到的情况。其中&#xff0c;当插入日志数据时&#xff0c;如果没有对数据的大小和范围进行有效的控制&#xff0c;就可能会引发一系列问题。想象一下这样的场景&#xff1a;我们…

花都狮岭寄宿自闭症学校:开启孩子的生命之门

在花都狮岭这片充满温情的土地上&#xff0c;有一所特别的学校&#xff0c;它像一把钥匙&#xff0c;轻轻旋转&#xff0c;为自闭症儿童们开启了一扇通往无限可能的生命之门——这就是广州星贝育园自闭症儿童寄宿制学校。这所学校不仅是知识的摇篮&#xff0c;更是孩子们心灵成…

BACnet-NPDU(4)

前面抓取了BACnet 的UDP和RS485数据进行分析&#xff0c;现在做一下总结。 BACnet不管是走UDP还是RS485&#xff0c;里面的NPDU和APDU数据结构是一样的&#xff0c;只是BACnet的头不一样&#xff0c;这里做一下总结。 1、UDP的BACnet 头 BACnet/IP 使用 UDP 协议进行数据传输&a…

spring cloud Gateway网关

网关是将所有面向用户的服务接口统一管理的代理服务器&#xff0c;所有内部服务的远程调用都是在局域网内部&#xff0c;而网关是在公网中。 一、依赖 通过访问网关调用项目中的服务&#xff0c;需要使用Eureka&#xff0c;网关服务器需要在Eureka服务注册它自己&#xff0c;本…

【C++报错已解决】std::ios_base::floatfield

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

The 2024 CCPC Online Contest (C I J三题思路)

写在前面 因为学弟已经问了几个题了&#xff0c;于是乎这场没有vp&#xff0c;准备直接开写了 题目 C. 种树&#xff08;树形dp&#xff09; 题解 只有两种情况&#xff0c; 一种是1-2-3&#xff0c;1是2的父亲&#xff0c;2是3的父亲 另一种是1-2-3&#xff0c;2同时是1…

新手如何使用Qt——方法使用

前言 那么这篇文章其实是我在使用Qt的过程当中呢&#xff0c;我发现在Qt使用过程中&#xff0c;在我理解信号和槽这个概念后&#xff0c;在编写槽函数数的时候&#xff0c;发现了自身存在的问题&#xff0c;我的难点是在于当我在编写槽函数的时候&#xff0c;我知道这个槽函数是…

GD32片内flash读写数据

如有技术问题及技术需求请加作者微信! GD32片内Flash的读写数据是微控制器编程中的常见任务,主要用于存储程序代码、配置参数或用户数据等。以下将详细介绍GD32片内Flash的读写数据方法和程序。 一、GD32 Flash的基本特性 存储空间划分:GD32的Flash存储空间通常分为主存储块…

W39-02-jmeter中如何实现:下一个请求是需要根据前一个请求返回值进行循环请求

业务压测需求&#xff1a; 查询和上报接口&#xff0c; 1.查询接口返回的数据有好几条需要上报的数据 2.查询接口中返回的每条数据中&#xff0c;有两个字段需要传递到上报接口 3.查询接口中&#xff0c;这两个字段一个为int型&#xff0c;一个为数组[1,2,3,4] 实现方式 …

大模型算法岗常见面试题100道(非常详细)零基础入门到精通,收藏这一篇就够了

大模型应该是目前当之无愧的最有影响力的AI技术&#xff0c;它正在革新各个行业&#xff0c;包括自然语言处理、机器翻译、内容创作和客户服务等等&#xff0c;正在成为未来商业环境的重要组成部分。 截至目前大模型已经超过200个&#xff0c;在大模型纵横的时代&#xff0c;不…