当前位置: 首页 > news >正文

做复刻衣服买网站/网站关键词收录查询

做复刻衣服买网站,网站关键词收录查询,射洪网站建设,包装设计公司有哪些呢引入: 数据结构的分类,数据结构可以分成:线性表,树形结构,图形结构。 线性结构(线性表)包括:数组、链表、栈队列 树形结构:二叉树、AVL树、红黑树、B树、堆、Trie、哈夫曼树、并查集 图形结构:邻接矩阵、邻接表 线性表是具有存…

引入:

数据结构的分类,数据结构可以分成:线性表,树形结构,图形结构。

  • 线性结构(线性表)包括:数组、链表、栈队列

  • 树形结构:二叉树、AVL树、红黑树、B树、堆、Trie、哈夫曼树、并查集

  • 图形结构:邻接矩阵、邻接表

在这里插入图片描述

线性表是具有存储n个元素的线性序列,常见的线性表有顺序表(数组)和链表两种实现方式。

为什么会出现ArrayList动态数组?

  • 在很多开发语言中数组有一个致命的缺点,就是数组的长度一旦确定,就不能再更改。
  • 我们在实际的开发中,更希望数组是可变的。

这个时候我们就可以使用数组去封装一个动态数组,java中的ArrayList的出现就是为了弥补数组长度不可变的缺点。

ArrayList的实现:

我们要对数组进行封装,也就是让这个数组如果元素装满了之后,重新创建一个更大的数组,将原来的元素复制过去。

分析:

实现动态数组,我们要创建一个类叫做ArrayList,因为他能存储所有引用类型的元素,我们要给它加一个泛型/,它要能动态获取它存储的元素的数量,所以它可以得到它应该有一个size成员,既然是一个动态数组,它的类成员一定有一个容器数组elements。这样我们就可以确定两个成员size和elements;

这个动态数组需要创建,所以我们得提供构造方法,既然它底层还是数组,那么创建的时候还是需要指定大小,可以自定义也可以创建一个默认大小的数组。java底层默认创建的是一个大小为10的数组。

package com.lut.dynamicArray;public class ArrayList<E> {//所装元素的数量public int size;//数组private E[] elements;//创建ArrayList底层数组默认的大小private static final int DEFAULT_CAPACITY = 10;//构造方法,自定义初始的ArrayList的大小,和java.util.ArrayList实现有所不同,可以自己进源码查看public ArrayList(int capacity){capacity = (capacity < DEFAULT_CAPACITY)?DEFAULT_CAPACITY:capacity;elements = (E[]) new Object[capacity];}public ArrayList(){//elements=new int[DEFAULT_CAPACITY];this(DEFAULT_CAPACITY);}
}

接口(方法)分析:

​ 这个类已经创建出来了,我们就需要向外界提供操作这个动态数组的方法。比如必须能够向这个ArrayList的对象里面添加元素、删除元素、按索引查找元素、按元素查索引、获取这个对象里面存储的元素个数等可以操作的方法。

​ 它至少包括以下方法:

int size();// 元素的数量
boolean isEmpty(); // 是否为空
boolean contains(E element);// 是否包含某个元素
void add(E element);// 添加元素到最后面
E get(int index);/返回index位置对应的元素
E set(int index, E element);//设置index位置的元素
void add(int index, E element);//往index位置添加元素
E remove(int index);// 删除index位置对应的元素
int index0f(E element);// 查看元素的位置
void clear();// 清除所有元素

需要注意的是,我们需要通过add方法不断地向ArrayList的对象里面添加元素,如果元素操作了我们创建ArrayList指定的大小,这个时候就需要扩容,所以我们在添加元素之前,需要调用ensureCapacity方法(这个方法只是为了方便理解,官方方法写的很复杂,名字也不叫ensureCapacity,不够调用的时机和位置一样),确保下一个元素不会索引越界,如果越界就需要进行扩容处理,扩容是直接在原数组的大小基础上扩大1.5倍。

我们在查找元素的时候或者是按索引添加元素的时候可能存在索引大于了ArrayList的默认的size或者为负数等不合理的输入,这个时候我们需要在这些方法前面调用一个rangeCheck(index)函数,确保传入的索引合适,而添加的时候索引可以比size大1,所以单独定义了一个rangeCheckForAdd(index),如果rangeCheck或者rangeCheckForAdd方法在检查索引发现不合适的时候就会调用outOfBounds方法。

下面是自定义低配版ArrayList的简单实现

private void ensureCapacity(int capacity) {int oldCapacity = elements.length;if(oldCapacity>=capacity) return;//新容量为旧容量的1.5倍int newCapacity = oldCapacity+(oldCapacity >> 1);//位运算右移1除以2,相当于旧容量1.5倍,相反左移1相当于乘以2E[] newElements = (E[]) new Object[newCapacity];for (int i = 0; i < size; i++) {newElements[i]=elements[i];}elements=newElements;System.out.println(oldCapacity+"扩容为:"+newCapacity);
}

下面对ArrayList进行了简单的实现

package com.lut.dynamicArray;@SuppressWarnings("unchecked")
public class ArrayList<E> {//元素的数量public int size;//所有的元素private E[] elements;//static能保证内存中只有一份此数据private static final int DEFAULT_CAPACITY = 10;//元素是否找到private static final int ELEMENT_NOT_FOUND = -1;public ArrayList(int capacity){capacity = (capacity < DEFAULT_CAPACITY)?DEFAULT_CAPACITY:capacity;elements = (E[]) new Object[capacity];//释放时机和外面的ArrayList同时释放}public ArrayList(){this(DEFAULT_CAPACITY);}/*** 清楚所有元素*/public void clear(){for (int i = 0; i < size; i++) {elements[i] = null;}size = 0;}/*** 元素的数量* @return*/public int size(){return size;}/*** 是否为空* @return*/public boolean isEmpty(){return size==0;}/*** 是否包含某个元素* @param element* @return*/public  boolean contains(E element){return indexOf(element) != ELEMENT_NOT_FOUND;}/*** 添加到元素尾部*/public void add(E element){add(size,element);}/*** 获取index位置的元素*/public E get(int index){rangeCheck(index);return elements[index];}/*** 设置index位置的元素* @return 原来的元素*/public E set(int index,E element){rangeCheck(index);E old = elements[index];elements[index] = element;return old;}/*** 在index位置插入一个元素*/public void add(int index,E element){rangeCheckForAdd(index);ensureCapacity(size+1);for (int i = size; i >index; i--) {elements[i]=elements[i-1];}elements[index]=element;size++;}/*** 删除index位置的元素* @return 返回删除的元素*/public E remove(int index){rangeCheck(index);E temp = elements[index];for (int i = index+1; i < size; i++) {elements[i-1]=elements[i];}//size--;elements[--size] = null;return temp;}/*** 查看元素的索引,没找到返回-1*/public int indexOf(E element){if(element == null){for (int i = 0; i < size; i++) {if(elements[i] == null) return i;}}else {for (int i = 0; i < size; i++) {//未重写的equals方法,就是默认比较的两个对象的地址if(element.equals(elements[i])) return i;}}return ELEMENT_NOT_FOUND;}/*** 保证要有capacity的容量* @param capacity*/private void ensureCapacity(int capacity) {int oldCapacity = elements.length;if(oldCapacity>=capacity) return;//新容量为旧容量的1.5倍int newCapacity = oldCapacity+(oldCapacity >> 1);//位运算右移1除以2,相当于旧容量1.5倍,相反左移1相当于乘以2E[] newElements = (E[]) new Object[newCapacity];for (int i = 0; i < size; i++) {newElements[i]=elements[i];}elements=newElements;System.out.println(oldCapacity+"扩容为:"+newCapacity);}private void outOfBounds(int index){throw new IndexOutOfBoundsException();}private void rangeCheck(int index){if(index<0||index>=size){outOfBounds(index);}}private void rangeCheckForAdd(int index){if(index<0||index>size){outOfBounds(index);}}@Overridepublic String toString() {StringBuilder string = new StringBuilder();string.append("size=").append(size).append(",[");for (int i = 0; i < size;java i++) {if(i!=0){string.append(",");}string.append(elements[i]);}string.append("]");return string.toString();}
}

仔细阅读上面的代码我们可以发现ArrayList有以下缺点:

  1. 固定大小:ArrayList的大小是固定的,一旦初始化后,无法动态调整大小,如果需要动态增加或减少元素,就需要创建一个新的数组elements,并将元素复制过去,这样会增加额外的开销。
  2. 性能问题:在插入或删除元素时,ArrayList的elements数组需要移动其他元素来保持连续性,这会导致性能下降,尤其是在大型数据集上。
  3. 内存占用:ArrayList在内存使用上比较消耗,因为它需要额外的空间来存储元素的索引和容量信息。

那么有没有和ArrayList一样的数据结构能够方便元素的插入删除,同时能够灵活的利用内存空间呢?有,LinkedList

LinkedList实现

分析:

LinkedList也是一个动态的线性表,所以它就必须能够存储元素,能够获取大小,ArrayList底层是通过一个数组存储元素,LinkedList内部是通过一个结点类来存储元素,同时这个Node里面有两个指针,prev指向前一个结点、next指向下一个结点,同时提供一个构造方法,当我们需要添加一个元素的时候本质是添加一个结点,再把这个元素放入到这个结点内部,同时维护好这个结点的前后结点。

所以LinkedList需要两个成员至少size和一个内部类Node

Node:

	private static class Node<E> {E element;Node<E> prev;Node<E> next;public Node(Node<E> prev, E element, Node<E> next) {this.prev = prev;this.element = element;this.next = next;}}

为了方便获取头节点,我们还需要指定一个头结点,我们需要一个成员变量Node类型的first

package com.lut.list;public class LinkedList<E>{private Node<E> first;private int size;private static class Node<E> {E element;Node<E> prev;Node<E> next;public Node(Node<E> prev, E element, Node<E> next) {this.prev = prev;this.element = element;this.next = next;}}
}

ArrayList和LinkedList我们经常使用,ArrayList又叫做动态数组底层是由数组实现的,LinkedList底层是基于链表实现的集合,它们都是线性的数据结构。

既然ArrayList和LinkedList都具有相同的方法,我们就可以把这些相同的方法给提取出来成为一个单独的接口,这个接口就是List接口。

public interface List<E> {//如果元素未找到返回-1static final int ELEMENT_NOT_FOUND = -1;//清除所有元素void clear();//元素的数量int size();// 是否为空boolean isEmpty();//是否包含某个元素boolean contains(E element);//添加元素到尾部void add(E element);//获取index位置的元素E get(int index);//获取index位置的元素E set(int index, E element);//在index位置插入一个元素void add(int index, E element);//删除index位置的元素E remove(int index);//查看元素的索引int indexOf(E element);
}

所以我们只需要去LinkedList去实现这些接口就可以了,然后对于LinkedList里面还有一些和ArrayList连实现都一样的方法,我们就可以单独写一个AbstractList/抽象类来复用相同的方法。

public abstract class AbstractList<E>  {/*** 元素的数量*/protected int size;/*** 元素的数量* @return*/public int size() {return size;}/*** 是否为空* @return*/public boolean isEmpty() {return size == 0;}/*** 是否包含某个元素* @param element* @return*/public boolean contains(E element) {return indexOf(element) != ELEMENT_NOT_FOUND;}/*** 添加元素到尾部* @param element*/public void add(E element) {add(size, element);}protected void outOfBounds(int index) {throw new IndexOutOfBoundsException("Index:" + index + ", Size:" + size);}protected void rangeCheck(int index) {if (index < 0 || index >= size) {outOfBounds(index);}}javaprotected void rangeCheckForAdd(int index) {if (index < 0 || index > size) {outOfBounds(index);}}
}

现在我们就可以直接实现专注实现List里面的不同的方法了。

需要注意理解里面的add方法,添加的时候,无论是调用add(E element)还是add(int index,E element),我们调用的add(E element)方法均会成为调用add(int index,E element)方法,原因是 public void add(E element) {add(size, element);}。

还需要注意,如果我们第一次添加的时候,需要把first指向它

下面是LinkedList的简单实现:

package com.lut.list;public class LinkedList<E> extends AbstractList<E> implements List<E>{private Node<E> first;private static class Node<E>{E element;Node<E> next;public Node(E element, Node<E> next) {this.element = element;this.next = next;}}@Overridepublic void clear() {size = 0;first = null;}@Overridepublic E get(int index) {return node(index).element;}//复杂度跟node方法有关,它的复杂度为O(n)@Overridepublic E set(int index, E element) {Node<E> node = node(index);E old = node.element;node.element = element;return old;}//O(n)@Overridepublic void add(int index, E element) {if(index == 0){first = new Node<>(element,first);}else{Node<E> prev = node(index - 1);prev.next = new Node<>(element, prev.next);}size++;}//最好:O(1)//最坏:O(n)//平均:O(n)//可以换一个算法,传入一个节点直接可以删,这样才体现链表的节点,增删快查找慢@Overridepublic E remove(int index) {E old = node(index).element;if(index == 0){first=first.next;}else{Node<E> prev = node(index - 1);prev.next = prev.next.next;}size--;return old;}//O(n)@Overridepublic int indexOf(E element) {if (element == null) {for (int i = 0; i < size; i++) {if (element == node(i).element) {return i;}}} else {for (int i = 0; i < size; i++) {if (element.equals(node(i).element)) {return i;}}}return ELEMENT_NOT_FOUND;}/*** 获取index位置对应的节点的对象*/private Node<E> node(int index){rangeCheck(index);Node<E> node = first;for (int i = 0; i < index; i++) {node = node.next;}return node;}@Overridepublic String toString() {StringBuilder string = new StringBuilder();string.append("size=").append(size).append(",[");for (int i = 0; i < size; i++) {if(i!=0){string.append(",");}string.append(node(i).element);}string.append("]");return string.toString();}
}

ArrayList优化:上面我们的ArrayList只是在添加满的时候进行了扩容,但是对于删除的时候我们还需要进行缩容,不然会浪费存储空间。缩容的时机是当我们删除元素的时候,在remove方法之前进行判断是否可以进行缩容,如果可以就进行缩容操作。

public class ArrayList<E> extends AbstractList<E> implements List<E>{/*** 所有的元素*/private E[] elements;private static final int DEFAULT_CAPACITY = 10;public ArrayList2(int capaticy) {capaticy = (capaticy < DEFAULT_CAPACITY) ? DEFAULT_CAPACITY : capaticy;elements = (E[]) new Object[capaticy];}public ArrayList2() {this(DEFAULT_CAPACITY);}/*** 清除所有元素*/public void clear() {for (int i = 0; i < size; i++) {elements[i] = null;}size = 0;// 仅供参考if (elements != null && elements.length > DEFAULT_CAPACITY) {elements = (E[]) new Object[DEFAULT_CAPACITY];}}/*** 获取index位置的元素* @param index* @return*/public E get(int index) { // O(1)rangeCheck(index);return elements[index]; }/*** 设置index位置的元素* @param index* @param element* @return 原来的元素ֵ*/public E set(int index, E element) { // O(1)rangeCheck(index);E old = elements[index];elements[index] = element;return old;}/*** 在index位置插入一个元素* @param index* @param element*/public void add(int index, E element) { /** 最好:O(1)* 最坏:O(n)* 平均:O(n)*/rangeCheckForAdd(index);ensureCapacity(size + 1);for (int i = size; i > index; i--) {elements[i] = elements[i - 1];}elements[index] = element;size++;} // size是数据规模/*** 删除index位置的元素*/public E remove(int index) {/** 最好:O(1)* 最坏:O(n)* 平均:O(n)*/rangeCheck(index);E old = elements[index];for (int i = index + 1; i < size; i++) {elements[i - 1] = elements[i];}elements[--size] = null;trim();return old;}/*** 查看元素的索引*/public int indexOf(E element) {if (element == null) {for (int i = 0; i < size; i++) {if (elements[i] == null) return i;}} else {for (int i = 0; i < size; i++) {if (element.equals(elements[i])) return i;}}return ELEMENT_NOT_FOUND;}/*** 保证要有capacity的容量* @param capacity*/private void ensureCapacity(int capacity) {int oldCapacity = elements.length;if (oldCapacity >= capacity) return;// 新容量为旧容量的1.5倍int newCapacity = oldCapacity + (oldCapacity >> 1);// 新容量为旧容量的2倍// int newCapacity = oldCapacity << 1;E[] newElements = (E[]) new Object[newCapacity];for (int i = 0; i < size; i++) {newElements[i] = elements[i];}elements = newElements;System.out.println(oldCapacity + "扩容为" + newCapacity);}private void trim() {// 30int oldCapacity = elements.length;// 15int newCapacity = oldCapacity >> 1;if (size > (newCapacity) || oldCapacity <= DEFAULT_CAPACITY) return;// 剩余空间还很多E[] newElements = (E[]) new Object[newCapacity];for (int i = 0; i < size; i++) {newElements[i] = elements[i];}elements = newElements;System.out.println(oldCapacity + "缩容为" + newCapacity);}@Overridepublic String toString() {// size=3, [99, 88, 77]StringBuilder string = new StringBuilder();string.append("size=").append(size).append(", [");for (int i = 0; i < size; i++) {if (i != 0) {string.append(", ");}string.append(elements[i]);}string.append("]");return string.toString();}
}

总结:

ArrayList 和 LinkedList 的区别是什么?

ArrayList 和 LinkedList 是 Java 中常用的两种集合类,它们在实现上有一些区别:

  1. 内部数据结构:

    • ArrayList 使用数组来存储元素,可以通过索引直接访问元素,因此查找速度较快,但插入和删除操作需要移动元素,效率较低。
    • LinkedList 使用双向链表来存储元素,每个元素都包含对前一个和后一个元素的引用,插入和删除操作只需改变相邻元素的引用,效率较高,但查找元素需要遍历链表,效率较低。
  2. 内存占用:

    • ArrayList 在添加或删除元素时可能需要重新分配内存空间,因为数组的大小是固定的,可能会导致内存碎片。
    • LinkedList 每个元素都需要额外的空间来存储前后元素的引用,可能会占用更多的内存空间。
  3. 随机访问和遍历:

    • ArrayList 支持随机访问,可以通过索引直接访问元素,适合需要频繁访问元素的场景。
    • LinkedList 需要从头或尾开始遍历链表才能访问元素,不支持随机访问,适合需要频繁插入和删除元素的场景。

综上所述,如果需要频繁进行插入和删除操作,可以选择使用 LinkedList;如果需要频繁进行随机访问操作,可以选择使用 ArrayList。

ArrayList的扩容和缩容是咋做的(基于官方的ArrayList)?

​ ArrayList在创建的时候可以指定一个数组的大小,或者默认给出一个长度为10的数组,当我们每次向这个集合添加元素的时候,先会去判断一下数组的容量还够不够,如果不够就需要去扩容,每次扩容会扩容原来容量的1.5倍。

​ 而ArrayList 的缩容是自动进行的,无需手动操作。当 ArrayList 中的元素数量减少到当前容量的一半以下时,ArrayList 会自动进行缩容操作,将容量减半。这样可以节省内存空间,并提高性能。因此,开发者无需手动调用任何方法来进行 ArrayList 的缩容操作。

相关文章:

java中的ArrayList和LinkedList的底层剖析

引入: 数据结构的分类&#xff0c;数据结构可以分成&#xff1a;线性表&#xff0c;树形结构&#xff0c;图形结构。 线性结构(线性表)包括:数组、链表、栈队列 树形结构:二叉树、AVL树、红黑树、B树、堆、Trie、哈夫曼树、并查集 图形结构:邻接矩阵、邻接表 线性表是具有存…...

占领矩阵-第15届蓝桥省赛Scratch中级组真题第5题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第190讲。 如果想持续关注Scratch蓝桥真题解读&#xff0c;可以点击《Scratch蓝桥杯历年真题》并订阅合集&#xff0c;…...

[论文笔记] Chain-of-Thought Reasoning without Prompting

分析: 在CoT解码路径中,我们可以看到模型在第三个位置(𝑖? = 3)开始展示推理过程,并且给出了正确的答案“8”。模型首先识别出说话者有3个苹果,然后识别出爸爸比说话者多2个,即5个苹果,最后将这两个数量相加得到总数8个苹果。 这个例子表明,通过探索替代的解码路径…...

C++八股进阶

之前那个只是总结了一下常考点&#xff0c;这个是纯手打记笔记加深理解 这里写目录标题 C的四种智能指针为什么要使用智能指针&#xff1f;四种智能指针&#xff1a; C中的内存分配情况C中的指针参数传递和引用参数传递C 中 const 和 static 关键字&#xff08;定义&#xff0…...

渗透测试--文件上传常用绕过方式

文件上传常用绕过方式 1.前端代码&#xff0c;限制只允许上传图片。修改png为php即可绕过前端校验。 2.后端校验Content-Type 校验文件格式 前端修改&#xff0c;抓取上传数据包&#xff0c;并且修改 Content-Type 3.服务端检测&#xff08;目录路径检测&#xff09; 对目…...

音视频生态下Unity3D和虚幻引擎(Unreal Engine)的区别

技术背景 好多开发者跟我们做技术交流的时候&#xff0c;会问我们&#xff0c;为什么有Unity3D的RTMP|RTSP播放模块&#xff0c;还有RTMP推送和轻量级RTSP服务模块&#xff0c;为什么不去支持虚幻引擎&#xff1f;二者区别在哪里&#xff1f;本文就Unity3D和虚幻引擎之间的差异…...

搭建基于H.265编码的RTSP推流云服务器

一、前言 网上能够找到的RTSP流地址&#xff0c;均是基于H.264编码的RTSP流地址&#xff0c;无法测试应用是否可以播放H265实时流为此&#xff0c;搭建本地的把H.264转码成H.265的RTSP服务器&#xff0c;不管是通过VLC搭建本地RTSP服务器&#xff0c;还是通过FFmpeg搭建本地RT…...

C++20 std::format

一、前言 1、传统 C 格式化的问题与挑战 可读性差&#xff1a;使用 C 中的 printf 和 scanf 家族函数进行格式化输出和输入时&#xff0c;它们的语法较为复杂&#xff0c;难以阅读。在较大的代码项目中&#xff0c;可读性差会导致维护困难。类型安全性差&#xff1a;printf 和…...

Python基础知识 (九)os模块、异常、异常的传递性

目录 OS模块 目录的具体操作 什么是异常 异常常见处理方式 异常分类&#xff1a; 捕获一个指定异常 捕获多个异常 捕获所有异常 异常具有传递性 OS模块 在Python中&#xff0c;os模块的常用函数分为两类&#xff1a; &#xff08;a&#xff09;通过os.path调用的函数…...

鸿蒙手势交互(三:组合手势)

三、组合手势 由多种单一手势组合而成&#xff0c;通过在GestureGroup中使用不同的GestureMode来声明该组合手势的类型&#xff0c;支持顺序识别、并行识别和互斥识别三种类型。 GestureGroup(mode:GestureMode, gesture:GestureType[]) //- mode&#xff1a;为GestureMode枚…...

【计算机方向】中科院二区TOP神刊!国人发文友好,刊文量高,录用容易!

期刊解析 &#x1f6a9;本 期 期 刊 看 点 &#x1f6a9; 中科院二区TOP期刊&#xff01; 审稿友好&#xff0c;IF4.8&#xff0c;自引率6.2% 最新年度发文530。 今天小编带来计算机领域SCI快刊的解读&#xff01; 如有相关领域作者有意投稿&#xff0c;可作为重点关注&am…...

Stable Diffusion 保姆级教程

1. 引言 近年来&#xff0c;Stable Diffusion 成为了图像生成领域的热门技术&#xff0c;它是一种基于扩散模型的生成模型&#xff0c;可以通过输入简单的文本描述生成高质量的图像。相比传统的生成对抗网络&#xff08;GAN&#xff09;&#xff0c;Stable Diffusion 更具稳定…...

踩坑记录:adb修改settings数据库ContentObserver无回调

在Android 14版本开发过程中遇到一个&#xff0c;通过adb修改settings数据库&#xff0c;发现生效但是监听的ContentObserver无回调 以背光亮度值调节为例 adb shell settings put system screen_brightness 18 调节亮度值到指定值&#xff0c;修改完后查看 adb shell set…...

JAVA毕业设计183—基于Java+Springboot+vue的旅游小程序系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue的旅游小程序系统(源代码数据库)183 一、系统介绍 本项目前后端不分离&#xff0c;分为用户、管理员两种角色 1、用户&#xff1a; 注册、登录、公告信息(…...

[大语言模型] 情感认知在大型语言模型中的近期进展-2024-09-26

[大语言模型] 情感认知在大型语言模型中的近期进展-2024-09-26 论文信息 Title: Recent Advancement of Emotion Cognition in Large Language Models Authors: Yuyan Chen, Yanghua Xiao https://arxiv.org/abs/2409.13354 情感认知在大型语言模型中的近期进展 《Recent A…...

WiFi无线连接管理安卓设备工具:WiFiADB

介绍 WiFi ADB 使您能够通过 WiFi TCP/IP 连接直接在设备上轻松调试和测试 Android 应用&#xff0c;无需使用 USB 数据线。在启用 WiFi 上的 ADB 后&#xff0c;打开控制台将电脑连接到设备。 手机和电脑在同一个WiFi然后电脑上运行adb connect x.x.x.x:x命令即可 下载 谷…...

Django项目配置日志

需求 在Django项目中实现控制台输出到日志文件&#xff0c;并且设置固定的大小以及当超过指定大小后覆盖最早的信息。 系统日志 使用Django自带的配置&#xff0c;可以自动记录Django的系统日志。 可以使用logging模块来配置。下面是一个完整的示例代码&#xff0c;展示了如…...

在IntelliJ IDEA中设置文件自动定位

当然&#xff0c;以下是一个整理成博客格式的内容&#xff0c;关于如何在IntelliJ IDEA中设置文件自动定位功能。 在IntelliJ IDEA中设置文件自动定位 背景 最近由于公司项目开发的需求&#xff0c;我从VSCode转到了IntelliJ IDEA。虽然IDEA提供了许多强大的功能&#xff0c;…...

机器学习笔记 - week6 -(十一、机器学习系统的设计)

11.1 首先要做什么 在接下来的视频中&#xff0c;我将谈到机器学习系统的设计。这些视频将谈及在设计复杂的机器学习系统时&#xff0c;你将遇到的主要问题。同时我们会试着给出一些关于如何巧妙构建一个复杂的机器学习系统的建议。下面的课程的的数学性可能不是那么强&#xf…...

对c语言中的指针进行深入全面的解析

1.普通的指针: 实际上指针就是存放地址的变量&#xff0c;eg: int a10; int *p&a; 拆分一下int *中的*说明p是一个指针&#xff0c;int是它所指向的类型&#xff1b; 2.字符串指针和字符串数组 char*str1"abcd"; 先看这一个&#xff0c;这个就是一个字符串…...

xxl-job 适配达梦数据库

前言 在数字化转型的浪潮中&#xff0c;任务调度成为了后端服务不可或缺的一部分。XXL-JOB 是一个轻量级、分布式的任务调度框架&#xff0c;广泛应用于各种业务场景。达梦数据库&#xff08;DM&#xff09;&#xff0c;作为一款国内领先的数据库产品&#xff0c;已经被越来越…...

Linux 配置与管理 SWAP(虚拟内存)

Linux 配置与管理 SWAP(虚拟内存&#xff09; 一、作用二、创建交换文件&#xff08;以创建一个2GB的交换文件为例&#xff09;1. 创建交换文件2. 设置文件权限2.1. **关于 sudo chmod 600 /root/swapfile 是否一定要执行**2.2. **关于其他用户启动是否没权限用到交换分区** 3.…...

yolo自动化项目实例解析(七)自建UI--工具栏选项

在上一章我们基本实现了关于预览窗口的显示&#xff0c;现在我们主要完善一下工具栏菜单按键 一、添加工具栏ui 1、配置文件读取 我们后面要改的东西越来越多了&#xff0c;先加个变量文件方便我们后面调用 下面我们使用的config.get意思是从./datas/setting.ini文件中读取关键…...

贝锐洋葱头浏览器随时随地访问教务系统,轻松搞定选课

教育网的“拥堵”早已是老生常谈&#xff0c;学生数量庞大、上网时间集中、带宽有限&#xff0c;导致网络速度慢。尤其是从外部网络访问教育网时&#xff0c;更是因为跨运营商的缘故变得缓慢。 而学校内网也是类似的情况&#xff0c;课余时间和上课时间的网络使用情况差别巨大…...

django drf to_internal_value

使用场景 用于将接收到的输入转换为内部可用的数据形式&#xff1b; 例子 to_internal_value主要在反序列化时用到&#xff0c;其作用处理API请求携带的数据&#xff0c;对其进行验证并转化为Python的数据类型。 假如我们的API客户端通过请求提交了额外的数据&#xff0c;比…...

map(lambda x: x[0], sorted(count.items(), key=lambda x: (-x[1], x[0]))[:n])

被解析的代码行 map(lambda x: x[0], sorted(count.items(), keylambda x: (-x[1], x[0]))[:n])假设的输入 假设我们有以下的 count 字典&#xff0c;其中包括一些字符串及其对应的计数&#xff1a; count {apple: 3,banana: 1,orange: 2,grape: 2 }1. count.items() 首先…...

灰度重心法求取图像重心

1 概述 灰度重心法(Gray-scale Center of Mass Method)是一种在图像处理和计算机视觉中常用的方法。这种方法主要用于确定图像中物体的质心或重心位置,特别是在灰度图像中。 灰度重心法的基本思想是,根据图像中每个像素的灰度值及其位置信息来计算一个加权重心,这个重心…...

Go Mail设置指南:如何提升发送邮件效率?

Go Mail使用技巧与配置教程&#xff1f;如何用Go Mail实现发信&#xff1f; 随着工作负载的增加&#xff0c;如何高效地发送和管理邮件成为了许多职场人士面临的挑战。AokSend将为您提供一份详细的Go Mail设置指南&#xff0c;帮助您提升发送邮件的效率&#xff0c;让您的邮件…...

kali的tplmap使用报错解决

问题 当我们直接使用kali下的tplmap时报错了。 Tplmap 0.5 Automatic Server-Side Template Injection Detection and Exploitation Tool Testing if GET parameter name is injectable Exiting: module collections has no attribute Mapping 这是因为tplmap要求的版本…...

DAY16||513.找树左下角的值 |路径总和|从中序与后序遍历序列构造二叉树

513.找树左下角的值 题目&#xff1a;513. 找树左下角的值 - 力扣&#xff08;LeetCode&#xff09; 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: […...