Java容器合集

news2025/1/12 18:18:03

目录

浅谈

Array数组

初始化(动与静)

动态初始化

静态初始化

CRUD

索引取值

遍历

走进底层

栈与堆

一个数组的诞生

多数组

避坑指南

索引越界

空指针异常

小试牛刀

Collection

List部落

介绍和特点

方法

ArrayList

介绍

方法

遍历

LinkedList

介绍

方法(特有)

Set部落

介绍

方法

HashSet

介绍

唯一性

LinkedHashSet

介绍

TreeSet

介绍

自然排序

比较器排序

Map

介绍和特点

方法的介绍

介绍

示例

遍历方式


  

浅谈

  • 容器: 容器是能够盛放物质的器皿,比如水杯,可以盛放水

  • 编程语言中的容器: 用于存储数据的数据结构,称为容器

Java中的容器可以整体认为三类: Array、Collection 和 Map,图中加粗是重点学习对象

   

Array数组

初始化(动与静)

动态初始化

// 动态初始化:数组动态初始化就是只给定数组长度, 由系统给出默认初始化值
// 动态初始化格式:数组类型[] 数组名 = new 数组类型[数组长度]
// 示例: int[] arr = new int[3] // 数组类型为int类型, 数组名为arr, 数组长度为3

// 示例: 动态初始化一个长度为5的数组, 并循环打印内部的所有元素
public class DemoTh {
    public static void main(String[] args) {
        // 动态初始化一个长度为5的数组
       int[] arr = new int[5];
       System.out.println(arr);
    }
}

静态初始化

// 静态初始化: 数组静态初始化是指在创建数组时, 直接将元素确定.
// 静态初始化格式:
    // 完整版:数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, ....}
    // 简化版:数组类型[] 数组名 = {元素1, 元素2, ....}
    
// 示例:创建一个包含1, 3, 5, 7, 9的数组, 并遍历输出其每一个元素
public class DemoOneToNine {
    public static void main(String[] args) {
        // 静态初始化数组
        int[] arr = {1, 3, 5, 7, 9};
        System.out.println(arr);
    }
}

CRUD

看初始化

索引取值
  • 索引即下标,代表元素在数组中的位置。Java数组的索引从0开始
public class DemoOneToNine {
    public static void main(String[] args) {
        // 静态初始化数组
        int[] arr = {1, 3, 5, 7, 9};
        System.out.println(arr[3]);  // 7
    }
}
遍历
// for循环示例: 按索引取出元素
public class DemoOneToNine {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        for (int i = 0;i<arr.length;i++) {
            System.out.println(arr[i]);
        };
    }
}
// for循环示例: 直接遍历出元素
public class DemoOneToNine {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        for(int item:arr) {
            System.out.println(item);
        }
    }
}

public class Test01 {
    public static void main(String[] args) {
        // 静态初始化数组
        int[] arr = {1, 3, 5, 7, 9};
        arr[0] = 666;
        for(int item:arr) {
            System.out.println(item);
        }
    }
}

走进底层

栈与堆

  • 栈:保存局部变量的值,包括:基本数据类型的值、类的实例(堆区对象的引用(指针)。
  • 堆:用来存放动态产生的数据,比如new出来的对象。注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因为同一个类的对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法,并不是每创建一个对象就把成员方法复制一次。

一个数组的诞生

public class JavaMem {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        System.out.println(arr);
    }
}

多数组

arr2 = arr1

public class JavaMem {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3};
        int[] arr2 = arr1;
        System.out.println(arr1[0]);  // 1
        System.out.println(arr2[0]);  // 1
        arr1[0] = 66;
        System.out.println(arr1[0]);  // 66
        System.out.println(arr2[0]);  // 1
    }
}

arr2 = {arr1[0], arr1[1], arr1[2]}

public class JavaMem {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3};
        int[] arr2 = {arr1[0], arr1[1], arr1[2]};
        System.out.println(arr1[0]); // 1
        System.out.println(arr2[0]); // 1
        arr1[0] = 666;
        System.out.println(arr1[0]);  // 66
        System.out.println(arr2[0]);  // 66
    }
}

避坑指南

索引越界

        索引越界是指使用索引获取数组元素时, 使用的索引不能超过数组元素的最大索引值, 超过后无法通过改索引获取指定的元素, 就会出现索引越界错误, 异常名称位: ArrayIndexOutOfBoundsException

空指针异常

        当一个数组对象被创建了, 当使用的过程中如果让数组对象指向了null, 即将null赋值给数组, 意味着变量arr将不会再保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。

小试牛刀

找出数组的最大值

public class GetMax {
    public static void main(String[] args) {
        
        int[] my_arr = {1, 5, 2, 0, -9, 8, 4};
        
        int max = my_arr[0];
        for (int i = 1; i < my_arr.length; i++) {
            if (my_arr[i] > max) {
                max = my_arr[i];
            }
        }
        System.out.println(max);
    }
}

返回两个元素的和等于定值,的这两个元素的索引

public class FindTarget {
    public static void main(String[] args) {
        
        int target = 8;
        int[] arr = {1, 3, 5, 7, 9};
        
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] + arr[j] == target) {
                    System.out.println("索引分别为: " + i + "," + j);
                }
            }
        }
    }
}

   

Collection

List部落

介绍和特点

  • List集合为有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素, 并搜索列表中的元素
  • 列表通常允许重复的元素
  • 特点:(1) 有索引 (2) 可以存储重复元素 (3) 元素存取有序

方法

方法名

描述

void add(int index,E element)

在此集合中的指定位置插入指定的元素

E remove(int index)

删除指定索引处的元素,返回被删除的元素

E set(int index,E element)

修改指定索引处的元素,返回被修改的元素

E get(int index)

返回指定索引处的元素

ArrayList

介绍

        在java中ArrayList提供一种存储空间可变的存储模型, 存储的数据容量是可以发生改变的. ArrayList底层是「数组」实现的, 长度可以变化.

方法

方法名

说明

public boolean add(E e)

将指定的元素追加到此集合的末尾

public void add(int index,E element)

在此集合中的指定位置插入指定的元素

public boolean remove(Object o)

删除指定的元素,返回删除是否成功

public E remove(int index)

删除指定索引处的元素,返回被删除的元素

public E set(int index,E element)

修改指定索引处的元素,返回被修改的元素

public E get(int index)

返回指定索引处的元素

public int size()

返回集合中的元素的个数

import java.util.ArrayList;

public class ArrayListDemo {
    public static void main(String[] args) {
        //创建ArrayList集合对象, 添加四个元素, 并输出在控制台中
        ArrayList<String> al = new ArrayList<>();
        al.add("Hello");
        al.add("World");
        al.add("Hello");
        al.add("Java");
        System.out.println("al的值:" + al);

        //获取索引为1的元素, 输出在控制台中
        System.out.println("al索引为1的元素: " + al.get(1));
        //修改索引为3的元素为"Hi"
        al.set(3,"Hi");
        //查看修改后的al
        System.out.println("修改索引为3的元素后的al: " + al);
        //移除索引为0的元素后输出al
        al.remove(0);
        System.out.println("移除索引为0的元素后的al: " + al);
        //移除内容为"Java"的元素后输出al
        al.remove("Java");
        System.out.println("移除Java后的al: " + al);
    }
}
遍历
import java.util.ArrayList;

public class ArrayListIterDemo {
    public static void main(String[] args) {
        
        ArrayList<String> al = new ArrayList<>();
        al.add("I");
        al.add("love");
        al.add("you");
        
        //普通for遍历
        for (int i=0;i<al.size();i++){
            System.out.println(al.get(i));
        };
        // 增强for遍历
        for (String item : al) {
            System.out.println(item);
        }
    }
}

LinkedList

介绍

        LinkedList功能与ArrayList一样,同样是一个List的实现类,功能也是存储数据使用。但LinkedList与ArrayList本质完全不同。

  • ArrayList:底层有数组实现
  • LinkedList:底层有链表实现
方法(特有)

方法名

说明

public void addFirst(E e)

在该列表开头插入指定的元素

public void addLast(E e)

将指定的元素追加到此列表的末尾

public E getFirst()

返回此列表中的第一个元素

public E getLast()

返回此列表中的第一个元素

public E removeFirst()

从此列表中删除并返回第一个元素

public E removeLast()

从此列表中删除并返回最后一个元素

import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList<Integer> numbers_linklist = new LinkedList<>();
        numbers_linklist.add(1);
        numbers_linklist.add(2);
        numbers_linklist.add(3);
        numbers_linklist.add(4);
        numbers_linklist.add(5);

        // addFirst方法
        numbers_linklist.addFirst(0);
        System.out.println(numbers_linklist);

        // addLast方法
        numbers_linklist.addLast(6);
        System.out.println(numbers_linklist);

        // getFirst方法
        System.out.println(numbers_linklist.getFirst());

        // getLast方法
        System.out.println(numbers_linklist.getLast());

        // removeFirst方法
        numbers_linklist.removeFirst();
        System.out.println(numbers_linklist);

        // removeLast方法
        numbers_linklist.removeLast();
        System.out.println(numbers_linklist);

    }
}

Set部落

介绍

        Set为集合,不包含重复元素的集合, 并且最多只有一个空元素。

方法

方法名

说明

add(E e)

如果指定的元素不存在,则将其指定的元素添加(可选操作)。

clear()

从此集合中删除所有元素(可选操作)。

contains(Objcet o)

如果此集合包含指定的元素,则返回 true 。

equals(Object o)

将指定的对象与此集合进行比较以实现相等。

hashCode()

返回此集合的哈希码值。

isEmpty()

如果此集合不包含元素,则返回 true 。

remove(Object o)

如果存在,则从该集合中删除指定的元素(可选操作)。

size()

返回此集合中的元素数(其基数)。

toArray()

返回一个包含此集合中所有元素的数组。

HashSet

介绍
  • 底层数据结构是哈希表
  • 对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致
  • 没有带索引的方法,所以不能使用普通for循环遍历(可以使用增强for循环和迭代器实现遍历)
  • 由于是Set集合,所以是不包含重复元素的集合
唯一性

前置知识:HashTable: 哈希表;HashCode: 哈希值

  • a.根据对象的哈希值计算存储位置(哈希值对16取模即可得到存储位置, 一个HashSet默认存储16个元素)
    • 如果当前位置没有元素则直接存入
    • 如果当前位置有元素存在,则进入第二步
  • b.当前元素和已经存在的元素比较哈希值
    • 如果哈希值不同,则将当前元素进行存储
    • 如果哈希值相同,则进入第三
  • c.通过equals()方法比较两个元素的内容
    • 如果内容不相同,则将当前元素进行存储
    • 如果内容相同,则不存储当前元素

LinkedHashSet

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

TreeSet

介绍
  • TreeSet元素排序方式取决于构造方法
    • Comparable(自然排序): 创建TreeSet对象时, 使用TreeSet()无参构造
    • Comparator(比较器): 创建TreeSet对象时, 使用TreeSet(Comparator comparator)有参构造方法, 传递的参数是Comparator接口的实现类对象, 则根据指定的比较器进行排序
  • TreeSet没有带索引的方法, 所以不能使用普通for循环遍历
  • 由于是Set集合, 所以不能存储重复的元素
public class TreeSetDemo01 {
    public static void main(String[] args) {
        //创建集合对象
        TreeSet<Integer> ts = new TreeSet<Integer>();
        
        //添加元素
        ts.add(10);
        ts.add(40);
        ts.add(30);
        ts.add(50);
        ts.add(20);
        ts.add(30);
        
        //遍历集合
        for(Integer i : ts) {
                System.out.println(i);
        }
    }
}
自然排序

        自然排序是在添加对象到集合内部时, 让其按照对象内部的比较方法进行自动排序. 构建TreeSet时使用无参构造方法即可.

        上面的例子中, 我们构建ts对象, 并向其中添加一些整型, 遍历ts对象会发现, 打印的顺序是从小到达的. 经查看Integer类源码发现, Integer底层实现了两个方法, 一个compare方法和compareTo方法, 其中compare负责进行比较, 而compareTo内部调用compare方法, 当前数与另一个数进行比较时, 如果当前数小于那个数, 则返回-1, 如果相等则返回0, 如果当前数大于那个数则返回1. 如果是自定义类实例化而来的对象, 需要自己定义compareTo()方法, 在方法内部定义比较规则.

        需求:定义学生类, 学生类内部定义compareTo方法, 按照学生年龄排序. 将学生类添加至TreeSet对象中, 遍历集合对象

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 void setName(String name) {
        this.name = name;
    }

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public int compareTo(Student s) {
        return this.age - s.age;
    }
}
public class TreeSetDemo {
    public static void main(String[] args) {
        TreeSet<Student> ts = new TreeSet<Student>();

        Student s1 = new Student("成成", 18);
        Student s2 = new Student("宝中", 17);
        Student s3 = new Student("金喜", 20);

        ts.add(s1);
        ts.add(s2);
        ts.add(s3);

        for (Student stu : ts) {
            System.out.println(stu.getName());
        }
    }
}
比较器排序

        使用比较器排序, 需要自己实现一个比较器, 并在初始化TreeSet时使用有参构造, 并把比较器传入进去, 对象加入TreeSet对象时, 就会按照比较器的规则进行排序了

        需求:定义学生类, 学生类内部定义compareTo方法, 按照学生年龄排序. 将学生类添加至TreeSet对象中, 遍历集合对象

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;
    }
}
public class TreeSetDemo {
    public static void main(String[] args) {
        TreeSet<Student> ts = new TreeSet<Student>(
                new Comparator<Student>() {
                    @Override
                    public int compare(Student s1, Student s2) {
                        return s1.getAge() - s2.getAge();
                    }
                }
        );

        Student s1 = new Student("小明", 18);
        Student s2 = new Student("小红", 17);
        Student s3 = new Student("小强", 20);

        ts.add(s1);
        ts.add(s2);
        ts.add(s3);

        for (Student stu : ts) {
            System.out.println(stu.getName());
        };
    }
}

   

Map

介绍和特点

Map为一个接口, 将键映射到值的对象。 Map不能包含重复的键; 每个键可以映射到最多一个值。

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

特点:

  • 键值对映射关系
  • 一个键对应一个值
  • 键不能重复, 值可以重复
  • 元素存取无序

基本使用:

import java.util.HashMap;
import java.util.Map;

public class MapDemo01 {
    public static void main(String[] args) {
        //创建HashMap对象
        Map<String, String> m = new HashMap<String, String>();
        //添加键值对
        m.put("name_1", "Jeremy");
        m.put("name_2", "Fish");
        //输出
        System.out.println(m);  //{name_2=Fish, name_1=Jeremy}
    }
}

方法的介绍

介绍

//增:
    - put(key, value): 添加键值对, 返回键对应的值

//删:
    - remove(key, value): 如果指定的键对应的值为value, 则进行删除
    - remove(key): 根据键删除键值对元素, 返回键对应的值
    - clear(): 清空所有键值对元素

//改:
    - put(key, value): 同则修改, 异则添加

//查:
    - containsKey(key): 判断是否存在某个特定的key, 返回值为布尔值
    - containsValue(Value): 判断是否包含指定的值, 返回值为布尔值
    - isEmpty(): 判断Map对象是否为空, 返回值为布尔值
    - size(): 获取Map对象键值对个数, 返回值为整型
    - get(key): 获取指定键的值
    - keySet(): 获取所有的键, 返回值为Set类型
    - Values(): 获取所有值的集合
    - enterSet(): 获取所有键值对对象的集合

示例

import java.util.HashMap;
import java.util.Map;

public class MapDemo01 {
    public static void main(String[] args) {
        Map<String, String> m = new HashMap<String, String>();
        m.put("name_1", "Jeremy");
        m.put("name_2", "Fish");
        System.out.print("put增加键值对后的m为: ");
        System.out.println(m);  //put增加键值对后的m为: {name_2=Fish, name_1=Jeremy}

        m.remove("name_1", "Jer");
        System.out.print("如果键name_1对应的值为Jer, 则移除: ");
        System.out.println(m);  //如果键name_1对应的值为Jer, 则移除: {name_2=Fish, name_1=Jeremy}

        //直接移除name_1的键值对
        m.remove("name_1");
        System.out.print("移除name_1的键值对后, m的值: ");
        System.out.println(m);  //移除name_1的键值对后, m的值: {name_2=Fish}

        //clear()后的m
        m.clear();
        System.out.print("clear()后m的值为: ");
        System.out.println(m);  //clear()后m的值为: {}

        //空对象m重新添加name_1键值对
        m.put("name_1", "Jeremy");
        m.put("name_2", "Lucy");
        System.out.print("重新添加name_1键值对的m为: ");
        System.out.println(m);  //重新添加name_1键值对的m为: {name_2=Lucy, name_1=Jeremy}
        //重复添加name_1的键, 但是改变对应的值
        m.put("name_1", "LiLi");
        System.out.print("使用name_1键的新值覆盖原有值后m的值: ");
        System.out.println(m);  //使用name_1键的新值覆盖原有值后m的值: {name_2=Lucy, name_1=LiLi}

        //判断是否包含指定的key
        System.out.println(m.containsKey("name_2"));  //true

        //判断是否包含指定的value
        System.out.println(m.containsValue("Lucy"));  //true

        //判断是否为空
        System.out.println(m.isEmpty());  //false

        //获取Map对象的长度
        System.out.println(m.size());  //2

        //获取指定键对应的值
        System.out.println(m.get("name_1"));  // LiLi

        //获取所有键的集合
        System.out.println(m.keySet());  //[name_2, name_1]

        //获取所有值的集合
        System.out.println(m.values());  //[Lucy, LiLi]

        //获取所有的键值对
        System.out.println(m.entrySet());  //[name_2=Lucy, name_1=LiLi]
    }
}

遍历方式

方式一

使用增强for, 遍历集合的所有键或值进行操作
import java.util.HashMap;
import java.util.Map;

public class MapDemo02 {
    public static void main(String[] args) {
        Map<String, String> m = new HashMap<String, String>();
        m.put("name_1", "金喜");
        m.put("name_2", "帅帅");
        m.put("name_3", "晨阳");

        for(String key: m.keySet()){
            System.out.println(key);
        }
        for (String value:m.values()){
            System.out.println(value);
        }
    }
}

方式二

通过增强for遍历键值对组成的EntrySet对象
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo03 {
    public static void main(String[] args) {
        Map<String, String> m = new HashMap<String, String>();
        m.put("name_1", "Jeremy");
        m.put("name_2", "刘桂宁");
        m.put("name_3", "毕奎成");

        Set<Map.Entry<String, String>> items = m.entrySet();
        for(Map.Entry<String, String> item:items) {
            System.out.println("键值对为: " + item);
            System.out.println("键为: " + item.getKey());
            System.out.println("值为: " + item.getValue());
            System.out.println("-------------------------");
        }
    }
}

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

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

相关文章

武汉凯迪正大KDZD5289硫化曲线测试仪(电脑无转子硫化仪)

电脑无转子硫化仪 硫化时间测试仪 硫化曲线仪 硫化曲线测试仪 武汉凯迪正大KDZD5289产品概述 KDZD5289硫化曲线测试仪&#xff08;电脑无转子硫化仪&#xff09;采用电脑控制进口温控仪进行准确控温&#xff0c;计算机适时进行数据处理并可进行统计、分析、存储对比等&#xff…

刚提离职,当天晚上公司就派人偷偷翻看我的电脑!

你被公司恶心过吗&#xff1f; 一位网友分享了被“恶心”的经历&#xff1a;提了离职&#xff0c;当天晚上电脑就被打开&#xff0c;提示有人登录自己微信&#xff0c;所有电脑记录都被偷偷翻看&#xff0c;她一怒之下在群里问&#xff0c;有人承认用了她的电脑&#xff0c;理由…

uniApp应用软件在运行时,未见向用户告知权限申请的目的,向用户索取(存储、相机、电话)等权限,不符合华为应用市场审核标准。

根据应用市场审核标准。我们开发的软件想要过审就必须要在应用在运行时&#xff0c;向用户告知权限申请的目的&#xff0c;向用户索取&#xff08;存储、相机、电话&#xff09;等权限&#xff01;&#xff01; 但是我们会发现做了提示弹框后又会驳回弹窗评频繁弹窗等等一系列…

【数据结构】单链表---C语言版

【数据结构】单链表---C语言版 一、顺序表的缺陷二、链表的概念和结构1.概念&#xff1a; 三、链表的分类四、链表的实现1.头文件&#xff1a;SList.h2.链表函数&#xff1a;SList.c3.测试函数&#xff1a;test.c 五、链表应用OJ题1.移除链表元素&#xff08;1&#xff09;题目…

Linux中的内存回收:Swap机制(图文并茂)

1、Swap机制是什么 &#xff1a; Swap机制是一种利用磁盘空间来扩展内存的方法。当系统的物理内存不足时&#xff0c;可以把一些不常用的内存数据写入到磁盘上的Swap分区&#xff0c;从而释放出更多的内存给其他需要的进程。当这些内存数据再次被访问时&#xff0c;系统会把它们…

多模态大模型总结2(主要2023年)

LLaVA-V1&#xff08;2023/04&#xff09; 论文&#xff1a;Visual Instruction Tuning 网络结构 如下图 所示为 LLaVA-v1 的模型结构&#xff0c;可以看出其简化了很多&#xff0c;但整体来说还是由三个组件构成&#xff1a; Vision Encoder&#xff1a;和 Flamingo 模型的 V…

Agent举例与应用

什么是Agent OpenAI 应用研究主管 Lilian Weng 在一篇长文中提出了 Agent LLM&#xff08;大型语言模型&#xff09;记忆规划技能工具使用这一概念&#xff0c;并详细解释了Agent的每个模块的功能。她对Agent未来的应用前景充满信心&#xff0c;但也表明到挑战无处不在。 现…

用VR+科普点亮科技之光VR航天科普体验巡展

11月22日至26日&#xff0c;第十一届中国(绵阳)科技城国际科技博览会圆满闭幕。本届科博会以“科技引领创新转化开放合作”为主题&#xff0c;创新办展办会模式&#xff0c;搭建高能级科技合作交流平台&#xff0c;展示了国内外科技创新发展成就和最新成果&#xff0c;举办了多…

铝合金轮毂金属部件全自动三维精密测量工业光学3d智能检测仪器-CASAIM-IS(2ND)

一、背景介绍 汽车轮毂是汽车零部件的重要组成部分。对于汽车而言&#xff0c;轮毂等同于腿对人的重要性。车辆将在行驶过程中产生横向和纵向载荷&#xff0c;车轮也将承受车辆和货物的所有载荷。随着汽车的速度越来越快&#xff0c;对车轮的动态稳定性和可靠性的要求也越来越…

最简单的Python程序员编辑器——学习Python的第二篇

第二章 基础 安装python 按照上一期的教程安装&#xff0c;如果有什么问题可以提出阿莱 安装完之后&#xff0c;在电脑的程序中查找SHELL 这里是Win10&#xff0c;win11你也是到程序菜单查找。 你可以把把它点击右键&#xff0c;保存到桌面上&#xff0c;或者固定到开始菜单…

版本控制系统Git学习笔记-Git基本知识介绍

目录 前言一、版本控制系统1.1 什么是版本控制系统1.2 本地版本控制系统1.3 集中化的版本控制系统1.3 分布式版本控制系统 二、Git简介2.1 数据处理方式2.2 几个特点2.2.1 几乎所有操作都是本地执行2.2.2 Git保证完整性2.2.3 Git一般只添加数据 2.3 Git中文件状态2.3.1 三种文件…

【UE】中文字体 发光描边材质

效果 步骤 1. 先将我们电脑中存放在“C:\Windows\Fonts”路径下的字体导入UE 点击“全部选是” 导入成功后如下 2. 打开导入的“SIMSUN_Font”&#xff0c;将字体缓存类型设置为“离线” 点击“是” 这里我选择&#xff1a;宋体-常规-20 展开细节面板中的导入选项 勾选“使用距…

教你用AI做艺术字,2个月,在小红书接广赚7200元

有段时间没给大家拆账号和完整地上教程了&#xff01;今天就来安排~如何用AI写艺术字&#xff0c;并且在小红薯实现商单BIANXIAN的系统教程.账号很多&#xff0c;我就拿这个AI艺术字搭配治愈系文案来展示下&#xff0c;这个比较有意思&#xff0c;艺术字治愈文案&#xff0c;视…

linux命令解析神器

遥想刚迈入职场时&#xff08;当时的工作环境&#xff0c;需要频繁使用linux&#xff0c;登录设备后台操作&#xff09;&#xff0c;偶然间听到我的领导和其他同事说 &#xff1a;“XXX&#xff0c;多学一学。大佬们太厉害了&#xff0c;太低级的问题不要直接问&#xff0c;你登…

直播带货“变天”,谦寻能否借AI“升咖”?

文 | 螳螂观察 作者 | 青月 直播带货&#xff0c;已经开始由过去的卷低价、卷GMV&#xff0c;渐渐演变为卷科技。 北京理工大学融合发展研究基地副主任尹西明就曾表示&#xff0c;AI不仅能够以更便捷、实时和多模态的交互来帮助供给端更高效地感知、获取并预测直播用户的偏好…

修改二进制程序的rpath和interpreter, 实现“高版本gcc编译出的程序在低版本glibc机器上运行“实验记录

编译环境&#xff1a; ubuntu20.04 gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 g (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 运行环境&#xff1a; centos7.9 gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) g (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) 验证源文件 main.cpp: #inc…

Android 实现环形进度条

一、项目需求 项目中常常需要用到进度条&#xff0c;很简单&#xff0c;这儿做一个简单的总结和实现 二、实现控件 ProgressBar 三、实现代码 1、水平的进度条 xml布局代码&#xff1a; <ProgressBarandroid:id"id/rocketProgressBar"style"style/Wid…

ChatGPT生成的一些有趣的文件管理用python小程序

1. 查找当前位置中的所有文件夹&#xff0c;并在每个文件夹中增加一个名为 abc 的新文件夹 import osdef create_abc_directories(root_dir.):# 获取当前目录下的所有目录subdirectories [d for d in os.listdir(root_dir) if os.path.isdir(os.path.join(root_dir, d))]# 在…

如何在Rocky Linux中安装nmon

一、环境基础 [rootlocalhost nmon16d]# cat /etc/redhat-release Rocky Linux release 9.2 (Blue Onyx) [rootlocalhost nmon16d]# uname -r 5.14.0-284.11.1.el9_2.x86_64 [rootlocalhost nmon16d]# 二、安装步骤 在Rocky Linux和AlmaLinux等基于RHEL 的发行版上&#xff…

具有“真实触感”的动捕数据手套mhand pro,提供更精确的动作捕捉

随着人工智能的普及和万物互联&#xff0c;vr虚拟技术备受关注&#xff0c;为了更加真实的虚拟现实交互体验&#xff0c;动捕数据手套的使用逐渐普及&#xff0c;vr手套可以实时采集各手指关节运动数据&#xff0c;使用动捕数据手套可以在虚拟现实的场景中实现对真实手部运动的…