10 Java数据结构:包装类、数组(Array工具类)、ArrayList

文章目录

  • 前言
  • 一、包装类
    • 1、Integer
      • (1)基本用法
      • (2)JDK5前的包装类用法(了解即可,能更好帮助我们理解下面的自动装箱和自动拆箱机制)
      • (3)自动装箱与自动拆箱机制 --- 导致:int和Integer,包装类和对应的基本数据类型在不需要进集合的情况下是互通的(重要重要!!!!!)
      • (4)Integer的常用方法
        • --- 进制转换方法
    • 2 包装类实现类型转换(重要!!!)
      • (1)Integer:public static int parseInt(String s):将字符串类型的整数转换成int类型的整数
      • (2)Boolean:public static boolean parseBoolean(String s):将字符串类型的布尔转换成boolean
  • 二、数组 -- int[]、String[]...
    • 1 数组的创建与初始化
      • (1)静态初始化
      • (2)动态初始化
    • 2 数组元素访问与修改
    • 3 数组的遍历
    • 4 数组的内存图(重要!!!!!!!)
    • 5 二维数组
      • (1)静态初始化
      • (2)动态初始化
      • (3)二维数组的内存图(重要重要重要!!!!!!!!!!!)
    • 6 数组小练习
  • 三、Arrays:操作数组的工具类(极其常用)
    • 1 public static String toString(数组):把数组拼接成一个字符串
    • 2 public static int binarySearch(数组):
  • 四、集合:ArryList --- 数组列表
    • 1 ArryList对象的创建
    • 2 ArryList常见成员方法
      • (1)boolean add(E e) : 添加元素,返回值表示是否添加成功
      • (2)void add(int index, E e) :在指定索引位置插入元素。
      • (3)boolean remove(E e) : 删除第一个指定元素 e,返回值表示是否删除成功
      • (4)E remove(int index) : 删除指定索引元素,返回被删除元素
      • (5)E set(int index, E e) : 修改指定索引下的元素,返回原来的元素
      • (6)E get(int index) : 获取指定索引处的元素
      • (7)int size() : 返回集合的长度
      • (8)boolean isEmpty() :判断数组列表是否为空。
    • 3 ArryList的遍历
      • (1)使用get()方法遍历
      • (2)使用增强for循环遍历


前言

本节会总结Java中各种数据结构里面的使用方法,包括之前的学过的数组、ArrayList、还包括链表、哈希表、树等数据结构一起其中的高级实用API。本博客会详细记录各种用法,作为个人的查询文档。

在学习这些数据结构前,前面有必要先来好好学习一下包装类,由于Java基本数据类型(可变)大部分集合都是不允许放进去的,我们必须要放其对应的包装类(不可变)才被允许放进去,所以学习这些集合第一关就是对应的包装类。


一、包装类

在前面我们其实简单讲过包装类,但讲的比较简单,这里做一个详细的笔记,方便后续查阅。

  • 包装类:基本数据类型对应的引用数据累加
    将Java中的基本数据类型重新写成引用数据类型,并且是不可变的;这样就和python一样了,Python里面有一句名言,万物皆对象,有了包装类这句话是不是也可以移到Java中,Java中万物皆对象。
  • 并且Java的集合的高级数据结构里面,基本数据类型由于其可变性,是不允许存进集合的;所以我们就需要将不可变的包装类存进集合实现相同的效果。

给出Java中基本数据类型和其对象的包装类内存图就清楚二者的关系了:
在这里插入图片描述

基本数据类型对应的包装类
byteByte
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean

可以看到只有char和int的包装类名有点变化要单独记一下,其余的都是首字母大写就可以了。
具体怎么用的建议先了解ArryList,下面给出示例:包装类就可以添加进集合了,表示方法和普通的写法一样,只是泛型要写包装类就是了。
下面以Integer演示包装类的用法,其他的都类似

1、Integer

(1)基本用法

// 创建 Integer
Integer a = 10;
Integer b = 11;// 进行运算
Integer sum = a + b;
System.out.println(sum);    // 21Double d = 5.0;
Double v = a * d;
double v1 = a * d;         // 这样也可以
System.out.println(v);     // 50.0  隐式类型转换这些都还有
System.out.println(v1);    // 50.0

可以看到和基本数据类型完全一样的用法,运算也一样,并且包装类和其对于的基本数据类型之间还存在自动隐式转换,使得二者是互通的。(这里设计到了我们等下要将的自动装箱、自动拆箱机制)

再看这个ArrayList list = new ArrayList<>();的例子ArrayList只能包装类进(可以跳到自动装箱哪里)

ArrayList<Integer> list = new ArrayList<>();
list.add(1);    // 自动装箱
list.add(2);
list.add(3);for (Integer i : list) {System.out.print(i + " ");   // 1 2 3

这就是典型的自动装箱机制。

(2)JDK5前的包装类用法(了解即可,能更好帮助我们理解下面的自动装箱和自动拆箱机制)

在JDK5以前创建一个Integer对象,要用到一下这些复杂的方法(部分现在都已经废弃了):
在这里插入图片描述
【注】:下面代码高版本jdk运行不了,方法已经废弃,这里只是做一个示例

Integer i1 = new Integer(1);
Integer i2 = new Integer(2);// 如果要用上面JDK5前的这些方法创建Integer对象,进行计算需要手动拆箱,在装箱
// 因为对象之间不能直接进行运算
// 步骤:
// 1. 先将对象转换为基本数据类型(拆箱)
// 2. 进行运算
// 3. 将基本数据类型转换为对象(装箱)int result = i1.intValue() + i2.intValue();  // 拆箱并运算
Integer i3 = new Integer(result);  // 装箱
System.out.println(i3);  

可以看到,包装类进行运算如果要手动拆箱后手动装箱,太麻烦了。没错,大佬们也觉得太麻烦了,于是JDK5以后就有了自动拆箱和自动装箱机制。

一个面试问题:

Integer i1 = Integer.valueOf(127);
Integer i2 = Integer.valueOf(127);
System.out.println(i1 == i2); // trueInteger i3 = Integer.valueOf(128);
Integer i4 = Integer.valueOf(128);
System.out.println(i3 == i4); // false// 下面new出来的好理解,只要new出来的对象地址不同,肯定是false
Integer i5 = new Integer(127);
Integer i6 = new Integer(127);
System.out.println(i5 == i6); // falseInteger i7 = new Integer(128);
Integer i8 = new Integer(128);
System.out.println(i7 == i8); // false

关键在于前两段,为什么127的是true , 128的是false

查看源码会发现 -128到127间(闭区间)的因为在实际开发中应用的比较多,如果每次使用都new对象浪费内存,于是底层这样设计为:

  • 提前把这个[-128,127]范围之内的每一个数据都创建好对象放进一个数组存起来
  • 如果要用到了不会创建新的,而是返回已经创建好的对象,所以127地址一样的是,128地址不一样。

这是一个面试题,所以我也在这里写一下。

(3)自动装箱与自动拆箱机制 — 导致:int和Integer,包装类和对应的基本数据类型在不需要进集合的情况下是互通的(重要重要!!!!!)

Integer i1 = 100;           // 自动装箱
Integer i2 = 100;Integer sum = i1 + i2;      // 内部会自动拆箱,然后再装箱
System.out.println(sum);int i3 = 99;
int sum2 = i1 + i3;         // i1会自动拆箱
System.out.println(sum2);     // 199// 注:除了部分集合只能包装类进,其他情况由于自动装箱拆箱,基本类型和包装类可以互相转换的,底层自动实现

再看这个ArrayList list = new ArrayList<>();的例子ArrayList只能包装类进

ArrayList<Integer> list = new ArrayList<>();
list.add(1);    // 自动装箱
list.add(2);
list.add(3);for (Integer i : list) {System.out.print(i + " ");   // 1 2 3

这就是典型的自动装箱机制。

(4)Integer的常用方法

— 进制转换方法
方法名说明
public static String toBinaryString(int i)得到二进制
public static String toOctalString(int i)得到八进制
public static String toHexString(int i)得到十六进制
// 1 把整数转换成二进制
String str1 = Integer.toBinaryString(100);
System.out.println(str1);   // 1100100// 2 把整数转换成八进制
String str2 = Integer.toOctalString(100);
System.out.println(str2);   // 144// 3 把整数转换成十六进制
String str3 = Integer.toHexString(100);
System.out.println(str3);   // 64

2 包装类实现类型转换(重要!!!)

(1)Integer:public static int parseInt(String s):将字符串类型的整数转换成int类型的整数

在python中这个功能 int()就能转,但在Java中必须这样才行

int i = Integer.parseInt("123");     // 字符串转整数  (自动拆箱)
System.out.println(i);      // 123
System.out.println(i + 1);  // 124
// 细节:"123"里面必须是数字,里面有字母无法转,会报错

【注】:除了Character包装类,其他7中包装类都有其对应的paseXxx的方法进行类型转换
有了这个就可以将之前的键盘录入代码做一个规范了 包装类数据类型转换在键盘录入中的应用

(2)Boolean:public static boolean parseBoolean(String s):将字符串类型的布尔转换成boolean

String str = "true";
boolean b = Boolean.parseBoolean(str);  // 字符串转布尔
System.out.println(b);  // true

二、数组 – int[]、String[]…

【注】:java的数组和Python的列表有很大的不同之处,下面的两个不同需要特别注意一下。

  • (1)java的数组里面也可以是任意数据类型、如整数、浮点数、字符、字符串等或者对象(如类的实例),但需要注意的是,一个数组里面只能含有一种数据类型,也就是说java数组里面只能存在同一种数据类型,而Python的一个列表内却是可以同时含有多种不同数据类型,这是一个主要的小区别。
  • (2)数组长度不可变:一旦数组创建并分配了空间,其长度不可改变。这点也是和Python不同,因此,如果需要动态增删元素,建议使用ArrayList等其他动态数组类。
  • (3)java中数组这些没有切片操作这些。

1 数组的创建与初始化

(1)静态初始化

  • 初始化就是在内存中为数组容器开辟空间,并将数据存入容器中的过程

  • 注:数组一旦创建过后其长度就固定了,不可改变
    数组的长度直接访问数组的length属性即可:arr.length

其中语法有下面完整写法和简单写法两种

  • 简单格式:数组类型[] 数组名 = {元素1,元素2,元素3…}
  • 完整格式:数组类型[] 数组名 = new 数组类型[]{元素1,元素2,元素3…}
public class Business {public static void main(String[] args) {int[] arr1 = new int[]{1,2,3};   // 这种是复杂的写法,一般使用下面的简单写法即可int[] arr2 = {1,2,3};String[] arr3 = new String[]{"a","b","c"};String[] arr4 = {"a","b","c"};System.out.println(arr2);  // [I@4eec7777System.out.println(arr4);  // [Ljava.lang.String;@3b07d329}
}

上面有个小细节,在java中直接打印数组打印的是数组的地址,下面对java中的地址格式做一个解释说明。
java地址格式说明:[I@4eec7777上面的这个地址,[ 表示是数组,I表示里面数据类型是整数 。@没有固定含义,就是一个固定格式,4eec7777这个才是真正的地址值。

(2)动态初始化

动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
语法: 数据类型[] 数组名 = new 数据类型[数组长度]

【注】:和静态相比,右边大括号没有了,中括号里面变数组长度了,要注意

int[] arr = new int[100]

数组默认的初始化规律:

  • 整数类型:默认初始化为0
  • 小数类型:默认初始化为0.0
  • 字符类型:默认初始化为‘/u0000’ 其实就是空格
  • 布尔类型:默认初始化为false
  • 引用数据类型:默认初始化为 null

2 数组元素访问与修改

语法:

  • 访问: 数组名[索引]
  • 修改:数组名[索引] = 具体数据/变量

【注】:
1、java中的索引也是从0开始的
2、java中数组索引不能是负数,这和Python不一样

String[] arr4 = {"a","b","c"};String s = arr4[0];System.out.println(s);   // aarr4[1] = "哈哈";System.out.println(arr4[1]);     // 哈哈

3 数组的遍历

关于数组的变量java提供了一种增强的增强型 for 循环 (foreach)
基本语法:for (int i : arr)
以下面案例为例:定义一个数组[1,2,3,4,5],并用遍历数组求里面元素的和。

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

另外还有一种普通for循环结合数组长度来的就没有那么方便了

public class Business {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};int sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}System.out.println(sum);}
}

【注】:今后我们尽量使用增强型的和Python类似

4 数组的内存图(重要!!!!!!!)

由于数组前面已经有博客记录过了,这里直接给出衔接数组

5 二维数组

数组里面存数组就是二维数组了。

(1)静态初始化

  • 语法格式: 数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2},{元素1,元素2}}
  • 简化格式:数据类型[][] 数组名 = {{元素1,元素2},{元素1,元素2}}
  • 范例:int[][] arr = new int[][]{{1,2},{3.4}} 或者 int[][] arr = {{1,2},{3.4}}
  • 注意:二维数组数据类型指定了,所有数据类型都要是指定的数据类型,就算是内部的数组里面的元素也应该是最先规定的数据类型。
public class Business {public static void main(String[] args) {// int[][] arr = new int[][]{{1,2,3},{4,5,6,7,8}};int[][] arr = {{1,2,3},{4,5,6,7,8}};//数组访问System.out.println(arr[0][0]);  // 1// 二维数组的遍历,也可以使用增强for循环for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j]+" ");}}System.out.println();// 二维数组的遍历,增强for循环for (int[] a : arr) {for (int i : a) {System.out.print(i+" ");}}}
}

(2)动态初始化

  • 语法格式:数据类型[][] 数组名 = new 数据类型[m][n]
    其中,m,n理解成m行n列就可以了。所以没有静态初始化那么灵活可以内部数组长度不一样,不为二维数组不就是为了处理矩阵问题,够用就行。如果要动态初始化内部数组长度不同的怎么办,也有办法,由于并不常用,就放在下面的内存图中顺便作为介绍内存图的案例了。
  • 范例: int[][] arr = new int[2][3];
public class Business {public static void main(String[] args) {// int[][] arr = new int[][]{{1,2,3},{4,5,6,7,8}};int[][] arr = new int[2][3];arr[0][0] = 100;// 遍历for (int[] row : arr){for (int data : row){System.out.print(data + " ");}System.out.println();}}
}
/* 输出:
100 0 0
0 0 0 
*/

(3)二维数组的内存图(重要重要重要!!!!!!!!!!!)

由于数组前面已经有博客记录过了,这里直接给出衔接数组

6 数组小练习

(1)求最值

public class Business {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};int max = arr[0];     // 初始化最大值为数组第一个元素,一定要是数组中的元素,不能是0for (int i = 1; i < arr.length; i++) {if (arr[i] > max) {max = arr[i];}}System.out.println("Max: " + max);}
}

(2)按索引交换数组对应元素
在Python中交换两个变量的值直接 a,b = b,a即可,但是java不行,中间必须用一个中间变量过度。

int a = 10;
int b = 5;int tem = a;
a = b;
b = tem;System.out.println("a = " + a);  // 5
System.out.println("b = " + b);  // 10

知道上面那个,数组内部元素交换就按上面技巧来就是了。
其实还有一些其他花里胡哨的骚套路可以节省tem的内存消耗。

看下面这个题目:
在这里插入图片描述
思路:用双指针,while(i!= j)

public class Business {public static void main(String[] args) {int[] arr = new int[]{1,2,3,4,5};int i = 0;int j = arr.length - 1;while(i!=j){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;i++;j--;}for(int k=0; k<arr.length; k++){System.out.println(arr[k]);}}
}

三、Arrays:操作数组的工具类(极其常用)

有没有发现数组里面没有什么方法吗?只有一个arr.length访问长度属性的属性访问手段。不要担心,这里就有这么一个操作数组的工具类,里面提供大量的静态方法操作数组,所以这个工具类用到的场景极其广泛。
下面同样给出常用的操作方法

1 public static String toString(数组):把数组拼接成一个字符串

2 public static int binarySearch(数组):

四、集合:ArryList — 数组列表

查阅帮助文档可以发现这个类在 java.util包下面

在之前创建数组我们采用的构造方式是 数组类型[] 数组名 = new 数组类型[]{元素1,元素2,元素3…}这种方式,这是独属于数组的构造方式。今后我们大多集合(还有些其他集合使用其他构造方式)都是使用 new + 泛型这种构造方式来创建集合对象。什么是泛型,打开ArryList的帮助文档:
在这里插入图片描述
上面这个<数据类型>括号就是泛型,用来指定集合里面的数据类型的。
了解了泛型就可以往下学习了

  • ArryList基本数据类型不能进,必须是对应的包装类才行
  • ArryList的长度是可以变的,理解成一个长度可变的动态数组
  • ArryList提供了一个subList(int fromIndex, int toIndex)方法可以达到类似切片的效果 — 有兴趣可以查看API帮助文档(具体是浅复制还是深复制还得查阅资料),由于重点不在切片,所以这里就不详细说明,用到查资料即可。

1 ArryList对象的创建

  • jdk7前的语法: Array<数据类型> 变量名 = new Array<数据类型> ()
  • jdk7以后的语法: Array<数据类型> 变量名 = new Array<> ()
// ArrayList<String> ls = new ArrayList<String>();
ArrayList<String> ls = new ArrayList<>();ls.add("a");ls.add("b");System.out.println(ls);    // [a, b]

【注】:这个就和Python列表很像了

2 ArryList常见成员方法

【注】:其中E表示ArryList里面元素数据类型 , e表示具体数据元素

(1)boolean add(E e) : 添加元素,返回值表示是否添加成功

(2)void add(int index, E e) :在指定索引位置插入元素。

(3)boolean remove(E e) : 删除第一个指定元素 e,返回值表示是否删除成功

(4)E remove(int index) : 删除指定索引元素,返回被删除元素

(5)E set(int index, E e) : 修改指定索引下的元素,返回原来的元素

(6)E get(int index) : 获取指定索引处的元素

(7)int size() : 返回集合的长度

// ArrayList<String> ls = new ArrayList<String>();
ArrayList<String> ls = new ArrayList<>();
ls.add("aaa");
ls.add("bbb");
ls.add("ccc");
ls.add("aaa");
System.out.println(ls);    // [aaa, bbb, ccc, aaa]ls.remove("aaa");    // 删除第一个aaa
System.out.println(ls);    // [bbb, ccc, aaa]ls.remove(1);    // 删除索引为1的元素
System.out.println(ls);    // [bbb, aaa]ls.set(1, "ddd");    // 修改索引为1的元素
System.out.println(ls);    // [bbb, ddd]System.out.println(ls.get(1));    // ddd
System.out.println(ls.size());    // 2

(8)boolean isEmpty() :判断数组列表是否为空。

这个判断为空有专门方法,没有Python那么方便。
【注】:java中的 逻辑运算符 ! 和Python中的not有同样效果

ArrayList<String> list = new ArrayList<>();
list.add("Apple");  // 添加一个元素,使列表非空// 判断是否非空
if (!list.isEmpty()) {System.out.println("List is not empty");
} else {System.out.println("List is empty");
}

3 ArryList的遍历

(1)使用get()方法遍历

(2)使用增强for循环遍历

ArrayList<String> list = new ArrayList<>();
list.add("Apple");  // 添加一个元素,使列表非空
list.add("Banana");
list.add("Orange");// 使用get方法遍历列表
for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i) + " ");
}System.out.println();// 使用增强for循环遍历列表
for (String str : list) {System.out.print(str + " ");
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于HarmonyOS的宠物收养系统的设计与实现(一)

基于HarmonyOS的宠物收养系统的设计与实现&#xff08;一&#xff09; 本系统是简易的宠物收养系统&#xff0c;为了更加熟练地掌握HarmonyOS相关技术的使用。 项目创建 创建一个空项目取名为PetApp 首页实现&#xff08;组件导航使用&#xff09; 官方文档&#xff1a;组…

redis实战——go-redis的使用与redis基础数据类型的使用场景(一)

一.go-redis的安装与快速开始 这里操作redis数据库&#xff0c;我们选用go-redis这一第三方库来操作&#xff0c;首先是三方库的下载&#xff0c;我们可以执行下面这个命令&#xff1a; go get github.com/redis/go-redis/v9最后我们尝试一下连接本机的redis数据库&#xff0…

黑神话孙悟空:自媒体小白的流量密码!

当下&#xff0c;黑神话孙悟空的热度如熊熊烈火&#xff0c;席卷了整个游戏世界。 只要与这个话题沾边&#xff0c;似乎就能轻松吸引大量关注。 那么&#xff0c;对于不怎么懂自媒体运营的小伙伴来说&#xff0c;该如何抓住这个机遇呢&#xff1f; 别担心&#xff0c;我们用以…

授权cleanmymac访问全部磁盘 Mac授权访问权限 cleanmymac缺少权限

CleanMyMac是Mac系统下的一款专业的苹果电脑清理软件&#xff0c;同时也是一款优秀的电脑系统管理软件。它能有效清理系统垃圾&#xff0c;快速释放磁盘内存&#xff0c;缓解卡顿现象&#xff0c;保障系统顺畅地运行。 全磁盘访问权限&#xff0c;就好比机场内进行的安全检查。…

微软AI人工智能认证有哪些?

微软提供的人工智能认证主要包括以下几个方面&#xff1a; Azure AI Fundamentals&#xff08;AI900认证&#xff09;&#xff1a;这是一个基础认证&#xff0c;旨在展示与Microsoft Azure软件和服务开发相关的基本AI概念&#xff0c;以创建AI解决方案。它面向具有技术和非技术…

Vue 导航条+滑块效果

目录 前言代码效果展示导航实现代码导航实现代码导航应用代码前言 总结一个最近开发的需求。设计稿里面有一个置顶的导航条,要求在激活的项目下面展示个下划线。我最先开始尝试的是使用 after 的伪类选择器,直接效果一样,但是展示的时候就会闪现变化,感觉不够自然,参考了一…

ES6解构赋值详解;全面掌握:JavaScript解构赋值的终极指南

目录 全面掌握&#xff1a;JavaScript解构赋值的终极指南 一、数组解构赋值 1、基本用法 2、跳过元素 3、剩余元素 4、默认值 二、对象解构赋值 1、基本用法 2、变量重命名 3、默认值 4、嵌套解构 三、复杂的嵌套结构解构 四、函数参数解构赋值 1、对象解构作为函…

ARM——驱动——Linux启动流程和Linux启动

一、flash存储器 lash存储器&#xff0c;全称为Flash EEPROM Memory&#xff0c;又名闪存&#xff0c;是一种长寿命的非易失性存储器。它能够在断电情况下保持所存储的数据信息&#xff0c;因此非常适合用于存储需要持久保存的数据。Flash存储器的数据删除不是以单个的字节为单…

单细胞组学大模型(1)--- iSEEEK

–https://doi.org/10.1093/bib/bbab573 A universal approach for integrating super large-scale single-cell transcriptomes by exploring gene rankings 打算深挖单细胞大模型的一系列文章、算法和代码&#xff0c;按时间线来去学习也许会好一些&#xff0c;所以第一篇带…

Spring Cloud Consul面试题

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 Spring Cloud Consul 是微服务架构中的一个重要组件&#xff0c;用于服务发现、配置管理以及健康检查。了解 Spring Cloud Consul 的工作原理和应用场景&#xff0c;对于微服务开发者和架构师来说至关重要。以下是一些常…

思特科技:国家宝藏数字体验馆展现东方美学 让“文物活起来”

01      思特科技为“国家宝藏数字体验展”提供“数字技术”支持&#xff0c;带来国宝的数字化演绎。以《国家宝藏》顶级IP为基础&#xff0c;打造的全新沉浸文化项目“国宝数字体验展“&#xff0c;借由文物的视角、站在历史的星河中&#xff0c;探寻时间长河中不变的智慧…

CART决策树-基尼指数(全网最详解)

文章目录 一、基尼指数的定义二、基尼指数在CART决策树中的应用三、基尼指数与CART决策树的构建1.计算每个子集的基尼系数&#xff1a;2.计算基尼指数3.选择最优特征4.其余基尼指数5.构建决策树 四、总结 CART决策树基尼指数是CART&#xff08;Classification And Regression T…

8-9月强化速成|30天带刷《严选题》《660》

如果你的目标是90-100分&#xff0c;肯定是够了&#xff0c;但是像下面这样微调一下更好 你的基础阶段做的是辅导讲义上的题目&#xff0c;那么你的基础阶段的题量肯定是够了。 但是强化阶段如果只做660题和严选题&#xff0c;这个题量还有有一些薄弱的&#xff0c;建议可以把…

四、4 逻辑操作符

按位与、按位或关注二进制位 逻辑与、逻辑或只关注真假 1、&&逻辑与&#xff08;并且&#xff09; 左边和右边都为真&#xff0c;结果为真&#xff08;为1&#xff09; 有一个为假&#xff0c;结果为假&#xff08;为0&#xff09; 2、|| 逻辑或&#xff08;或者&a…

NumExpr加速计算(numpy表达式)

文章目录 一、简介二、安装三、函数详解四、性能评估 Python 性能优化&#xff1a;NumExpr Numba CuPy 一、简介 numexpr&#xff08;全称&#xff1a;numpy expression&#xff09;&#xff1a;用于在 NumPy 表达式上快速执行元素级运算的 Python 加速库。 优势&#xff1…

python非交互连接mysql+mycat读写分离实现

python非交互连接mysql >>>import pymysql >>>connpymysql.connect(host"192.168.118.57",port3306,database"test",user"root",password"root") >>> cursorconn.cursor() >>> cursor.execut…

Element-ui table进阶使用

最近项目有多个报表开发的需求&#xff0c;我采用的是凤翎前端组件框架&#xff08;基于element-ui开发&#xff09;&#xff0c;大伙可以直接参考element-ui组件库文档&#xff0c;把标签中的fks替换为el即可。下面我会按顺序一一展开细说这些需求&#xff1a; 1、有多级表头…

AI大模型开发——7.百度千帆大模型调用

本节旨在为读者提供一个实用指南&#xff0c;探讨如何有效地利用百度千帆大模型平台的强大功能。从基础的账号注册和密钥申请入手&#xff0c;逐步引领用户通过案例&#xff0c; 理解并掌握如何调用文本和图像处理的大模型 API&#xff0c; 包括但不限于 NLP、对话生成、文本续…

CV每日论文--2024.7.25

1、Diffusion Models for Monocular Depth Estimation: Overcoming Challenging Conditions 中文标题&#xff1a;单目深度估计的扩散模型&#xff1a;克服具有挑战性的条件 简介&#xff1a;本文提出了一种新颖的方法,旨在解决单张图像深度估计任务中具有挑战性的、超出分布范…

linux 磁盘满了,程序运行失败,如何处理?df -h

场景&#xff1a;紧急呼救&#xff0c;上传图片失败了。我一脸懵&#xff0c;服务器这是又咋地了&#xff0c;别邪乎姐姐&#xff0c;姐姐胆子小啊。 一、寻找问题原因 1、OSS出问题了&#xff1f; 然后我尝试了 IOS 的APP是没问题的&#xff0c;Android提示上传失败&#xf…