Java常用5大集合类详解(实战)

文章目录

  • 1、Collection
    • 1.1 iterator 迭代器
  • 2、List 有序集合
    • 2.1 ArrayList ⭐
    • 2.2 LinkedList
    • 2.3 Queue
  • 3、Set 无序集合
    • 3.1 HashSet ⭐
    • 3.2 TreeSet
    • 3.3 LinkedHashSet
  • 4、Map 键值集合
    • 4.1 HashMap ⭐
    • 4.2 TreeMap / LinkedHashMap
  • 5、工具类
    • 5.1 Collections
    • 5.2 Arrays
  • 【拓展】
    • HashTable/ConcurrentHashMap

  • 深入学习:吃透Java集合框架!
  • 简易知识体系:

  • 超详细体系架构图:

image.png

1、Collection

  • Collection集合概述
    • 是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
    • JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如SetList)实现
      | 返回值 | 方法名 | 解释 |
      | — | — | — |
      | boolean | add(E e) | 添加元素 |
      | boolean | remove(Object o) | 从集合中移除指定的元素 |
      | void | clear() | 清空集合中的元素 |
      | boolean | contains(Object o) | 判断集合中是否存在指定的元素 |
      | boolean | isEmpty() | 判断集合是否为空 |
      | int | size() | 集合的长度,也就是集合中元素的个数 |
//创建Collection集合的对象
Collection<String> c = new ArrayList<String>();
//添加元素:boolean add(E e)
c.add("hello");
c.add("world");

1.1 iterator 迭代器

  • 迭代器:集合的专用遍历方式
    • Iterator iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
    • 迭代器是通过**集合的iterator()**方法得到的,所以我们说它是依赖于集合而存在的

image.png

  • 注:一共就这四个方法:
    | 返回值 | 方法名 | 解释 |
    | — | — | — |
    | boolean | hasNext() | 如果集合中存在元素,则返回true |
    | E | next() | 返回集合的下一个元素 |
    | void | remove() | 删除next()返回的最后一个元素 |
    | void | forEachRemaining() | 对集合的每个剩余元素执行指定的操作 |
List<Integer> num = Arrays.asList(1, 2, 3); //创建一个ArrayList
ArrayList<Integer> nums = new ArrayList<>(num);
Iterator<Integer> iterate = nums.iterator(); //创建Iterator的实例

int number = iterate.next(); //1、使用next()方法
iterate.remove(); //2、使用remove()方法

while(iterate.hasNext()) { //3、使用hasNext()方法
    //4、使用forEachRemaining()方法
    iterate.forEachRemaining((value) -> System.out.print(value + ", "));
}

2、List 有序集合

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

image.png

返回值方法名解释
voidadd(int index,E element)在此集合中的指定位置插入指定的元素
Eremove(int index)删除指定索引处的元素,返回被删除的元素
Eset(int index,E element)修改指定索引处的元素,返回被修改的元素
Eget(int index)返回指定索引处的元素

列表迭代器

  • ListIterator介绍
    • 通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器
    • 用于允许程序员沿任一方向遍历的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置
List<String> list = new ArrayList<String>(); //创建集合对象
list.add("hello"); //添加元素
list.add("world");

ListIterator<String> lit = list.listIterator(); //获取列表迭代器
while (lit.hasNext()) {
    String s = lit.next();
    if(s.equals("world"))  lit.add("javaee"); 
}

2.1 ArrayList ⭐

  • ArrayList:底层是数组结构实现,查询快、增删慢 (底层:动态数组)
  • 泛型的使用:约束集合中存储元素的数据类型
    | 返回值 | 方法名 | 解释 |
    | — | — | — |
    | boolean
    void | add(E element)
    add(int index, E element) | 将指定元素追加到ArrayList的末尾
    在指定位置插入指定元素 |
    | boolean
    E | remove(Object element)
    remove(int index) | 从ArrayList中移除指定元素
    移除指定位置的元素 |
    | E | get(int index) | 获取指定位置的元素 |
    | E | set(int index, E element) | 将指定位置的元素替换为新元素,
    并返回原来位置元素的值。 |
//创建ArrayList集合对象
ArrayList<Student> array = new ArrayList<Student>();
Student s1 = new Student("林青霞", 30);
Student s2 = new Student("张曼玉", 35);
array.add(s1);
array.add(s2);

//迭代器:集合特有的遍历方式
Iterator<Student> it = array.iterator();
while (it.hasNext()) {
    Student s = it.next();
    System.out.println(s.getName() + "," + s.getAge());
}

//普通for:带有索引的遍历方式
for(int i=0; i<array.size(); i++) {
    Student s = array.get(i);
    System.out.println(s.getName() + "," + s.getAge());
}

//增强for:最方便的遍历方式
for(Student s : array) {
    System.out.println(s.getName() + "," + s.getAge());
}

:::tips

  • 增加(add)操作:在末尾添加元素的时间复杂度为O(1),如果需要在中间或开头插入元素,则为O(n)。
  • 删除(remove)操作:删除指定索引的元素的时间复杂度为O(n),因为需要移动后续元素。
  • 修改(set)操作:修改指定索引位置的元素的时间复杂度为O(1)。
  • 查找(get)操作:根据索引获取元素的时间复杂度为O(1)。
    :::

2.2 LinkedList

  • LinkedList:底层是链表结构实现,查询慢,增删快(底层:双向链表)
    | 返回值 | 方法名 | 解释 |
    | — | — | — |
    | boolean
    void
    boolean | add(E element)
    add(int index, E element)
    addFirst(E element) | 元素插入到链表末尾
    指定位置插入元素
    在链表开头插入元素(addLast) |
    | E
    boolean
    E | remove(int index)
    remove(E element)
    removeFirst() | 移除指定位置的元素,并返回被移除的元素
    从链表中移除指定元素
    移除并返回链表第一个元素(removeLast) |
    | E
    void | get(int index)
    getFirst() | 获取指定位置的元素,并返回其值。
    返回链表的第一个元素(getLast) |
    | E | set(int index, E element) | 将指定位置的元素替换为新元素,并返回原来位置元素的值。 |

:::tips

  • 增加(add)操作:在末尾添加元素的时间复杂度为O(1),如果需要在中间或开头插入元素,则为O(n)。
  • 删除(remove)操作:删除指定节点的时间复杂度为O(1)。
  • 修改(set)操作:修改指定节点的元素的时间复杂度为O(1)。
  • 查找(get)操作:根据索引获取元素的时间复杂度为O(n)。
    :::

2.3 Queue

image.png

1、PriorityQueue

返回值方法名解释
booleanoffer(E e)
add(E e)都是插入到优先级队列中
差别:队列已满时,offer返回false;add抛出异常
Epoll()检索并移除队列中的头部元素
booleanpeek()
element()检索但不移除队列中的头部元素
差别:队列为空时,peek返回null;element抛出异常
booleanremove(Object o)移除队列中的指定元素

3、Set 无序集合

  • Set集合的特点:元素存取无序、没有索引(只能迭代器/增强for循环遍历)、不能存储重复元素

image.png

哈希值

  • Hash值:是JDK根据对象的地址/字符串/数字算出来的int类型的数值
  • 如何获取哈希值:Object类中的public int hashCode():返回对象的哈希码值
  • 哈希值的特点
    • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
    • 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同

3.1 HashSet ⭐

:::tips
HashSet集合特点:

  • 底层数据结构是哈希表

  • 对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致

  • 没有带索引的方法,所以不能使用普通for循环遍历

  • 由于是Set集合,所以是不包含重复元素的集合
    :::
    | 返回值 | 方法名 | 解释 |
    | — | — | — |
    | boolean | add(E element)
    addAll(Collection<? extends E> collection) | 将指定元素添加到HashSet中 将指定集合中所有元素添加到HashSet中 | | boolean | remove(Object element) removeAll(Collection<?> collection) | 从HashSet中移除指定元素
    从HashSet中移除与指定集合中元素相同的所有元素 |
    | boolean | retainAll(Collection<?> collection) | 仅保留HashSet中与指定集合中元素相同的元素,移除其他元素。 | | boolean | containsAll(Collection<?> collection) | 判断HashSet是否包含指定集合中的所有元素 |

  • 哈希表图示:**数组+链表 **结构


20210105174428536.png

  • 当链表元素>=8时,链表进化成红黑树(增删慢,要维护树结构,但查询效率高!)
    :::tips

  • 增加(add)操作:添加元素的时间复杂度为O(1)。

  • 删除(remove)操作:删除元素的时间复杂度为O(1)。

  • 修改(set)操作:HashSet不提供直接修改操作,需要先删除再添加。

  • 查找(contains)操作:判断元素是否存在的时间复杂度为O(1)。
    :::

3.2 TreeSet

  • TreeSet:元素有序,可以按照一定的规则进行排序,具体排序方式取决于构造方法
    | 构造方法 | 解释 |
    | — | — |
    | TreeSet() | 根据其元素的自然排序进行排序 |
    | TreeSet(Comparator comparator) | 根据指定的比较器进行排序 |

  • TreeSet特点:没有索引方法(不能使用普通for循环遍历)、Set集合(不包含重复元素集合)
    | 返回值 | 方法名 | 解释 |
    | — | — | — |
    | boolean | add(E element) | 将指定元素添加到TreeSet中 |
    | boolean | remove(Object element) | 从TreeSet中移除指定元素 |
    | E | first()
    last() | 返回TreeSet中的第一个(最小)元素。
    返回TreeSet中的最后一个(最大)元素。 |
    | E | ceiling(E element)
    floor(E element) | 返回TreeSet中大于等于给定元素的最小元素。
    返回TreeSet中小于等于给定元素的最大元素。 |
    | E | pollFirst()
    pollLast() | 移除并返回TreeSet中的第一个(最小)元素。
    移除并返回TreeSet中的最后一个(最大)元素。 |
    | NavigableSet | descendingSet() | 返回TreeSet的逆序视图,其中元素按降序排列。 |

:::tips

  • 增加(add)操作:添加元素的时间复杂度为O(log n)。
  • 删除(remove)操作:删除元素的时间复杂度为O(log n)。
  • 修改(set)操作:TreeSet不提供直接修改操作,需要先删除再添加。
  • 查找(contains)操作:判断元素是否存在的时间复杂度为O(log n)。
    :::

自然排序Comparable / 比较器排序Comparator

  • 案例需求
    • 存储学生对象并遍历,创建TreeSet集合使用无参构造方法
    • 要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
  • 实现步骤
    • 用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的
    • 自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(T o)方法
    • 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
      :::tips
  1. 自然排序Comparable的使用:
    • 用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的
    • 自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(T o)方法
    • 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
      :::
//自然排序 Comparator
TreeSet<Student> ts = new TreeSet<Student>();

:::tips

  1. 比较器排序Comparator的使用:
    • 用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的
    • 比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(T o1,T o2)方法
    • 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
      :::
//比较器 Comparable
TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
    @Override
    public int compare(Student s1, Student s2) {
    int num = s1.getAge() - s2.getAge(); //主要条件
    int num2 = num == 0 ? s1.getName().compareTo(s2.getName()):num; //次要条件
    return num2;
    }
});

3.3 LinkedHashSet

  • LinkedHashSet集合特点
    • 哈希表和链表实现的Set接口,具有可预测的迭代次序
    • 由链表保证元素有序,也就是说元素的存储和取出顺序是一致的
    • 由哈希表保证元素唯一,也就是说没有重复的元素
      | 返回值 | 方法名 | 解释 |
      | — | — | — |
      | boolean | add(E element) | 将指定元素添加到LinkedHashSet中 |
      | boolean | remove(Object element) | 从LinkedHashSet中移除指定元素 |
      | E | get(int index) | 根据索引位置获取LinkedHashSet中的元素。 |
      | Iterator | iterator() | 遍历LinkedHashSet中的元素 |
      | Object[] | toArray() | 将LinkedHashSet转换为一个对象数组 |
      | boolean | addAll(Collection<? extends E> collection) | 将指定集合中的所有元素添加到LinkedHashSet中 | | boolean | retainAll(Collection<?> collection) | 仅保留LinkedHashSet中与指定集合中的元素相同的元素,移除其他元素。 |
LinkedHashSet<String> linkedHashSet = new LinkedHashSet<String>();
//添加元素
linkedHashSet.add("hello");
linkedHashSet.add("world");

for(String s : linkedHashSet) 
    System.out.println(s);

4、Map 键值集合

image.png

  • Map集合特点 :key:value对映射关系、键不能重复,值可以重复、元素存取无序

4.1 HashMap ⭐

:::tips
**概述:**HashMap使用哈希表来存储数据,通过计算键的哈希值来确定其在内部数组中的存储位置。

  1. HashMap的键是唯一的,如果插入相同的键,新的值会覆盖旧的值。它不保证键值对的顺序,也不保证插入顺序和访问顺序一致。
  2. 使用HashMap可以快速地插入、获取、更新和删除键值对,其时间复杂度为O(1)。它是线程不安全的,需要在多线程环境下使用可以使用ConcurrentHashMap。
  3. HashMap在遍历时,不保证元素的顺序,如果需要有序遍历,可以考虑使用LinkedHashMap。此外,由于哈希碰撞的存在,当键的哈希值相同时,会使用链表或红黑树等数据结构来解决冲突,以保证性能。
    :::
    | 返回值 | 方法名 | 解释 |
    | — | — | — |
    | V | put(K key, V value) | 将指定的键值对添加到HashMap中【键存在:并返回之前关联的值 / 键不存在:则返回null】 |
    | V | remove(Object key) | 移除HashMap中指定键对应的键值对,并返回之前关联的值。 |
    | boolean | containsKey(Object key)
    containsValue(Object value) | 判断HashMap中是否包含指定键 / 值。 |
  • 集合的获取功能
    | 返回值 | 方法名 | 解释 |
    | — | — | — |
    | V | get(Object key) | 根据获取 |
    | Set | keySet() | 获取所有键的集合 |
    | Collection | values() | 获取所有值的集合 |
    | Set | entrySet() | 获取所有键值对对象的集合 |
Map<String, String> map = new HashMap<String, String>();
map.put("张无忌", "赵敏");
map.put("郭靖", "黄蓉");

//V get(Object key):根据键获取值
System.out.println(map.get("张无忌"));
System.out.println(map.get("张三丰"));

//Set<K> keySet():获取所有键的集合
Set<String> keySet = map.keySet();
for(String key : keySet) 
	String value = map.get(key); //获得到value

//Collection<V> values():获取所有值的集合
Collection<String> values = map.values();
for(String value : values) 
    System.out.println(value);

:::tips

  • 增加(put)操作:添加键值对的时间复杂度为O(1)。
  • 删除(remove)操作:删除键值对的时间复杂度为O(1)。
  • 修改(put)操作:修改键值对的时间复杂度为O(1)。
  • 查找(get)操作:根据键获取值的时间复杂度为O(1)。
    :::

1、String值是Student

HashMap<String, Student> hm = new HashMap<String, Student>();
Student s1 = new Student("林青霞", 30);
Student s2 = new Student("张曼玉", 35);
hm.put("itheima001", s1);
hm.put("itheima002", s2);

//方式1:键找值
Set<String> keySet = hm.keySet();
for (String key : keySet) {
    Student value = hm.get(key);
    System.out.println(key + "," + value.getName() + "," + value.getAge());
}

//方式2:键值对对象找键和值
Set<Map.Entry<String, Student>> entrySet = hm.entrySet();
for (Map.Entry<String, Student> me : entrySet) {
    String key = me.getKey();
    Student value = me.getValue();
    System.out.println(key + "," + value.getName() + "," + value.getAge());
}

2、Student值是String

HashMap<Student, String> hm = new HashMap<Student, String>();
Student s1 = new Student("林青霞", 30);
Student s2 = new Student("张曼玉", 35);
hm.put(s1, "西安");
hm.put(s2, "武汉");

Set<Student> keySet = hm.keySet();
for (Student key : keySet) {
    String value = hm.get(key);
    System.out.println(key.getName() + "," + key.getAge() + "," +
                       value);
}

4.2 TreeMap / LinkedHashMap

  • TreeMap:
    | 返回值 | 方法名 | 解释 |
    | — | — | — |
    | K | firstKey()
    lastKey() | 返回TreeMap中最小的键
    返回TreeMap中最大的键 |
    | K | higherKey(K key)
    lowerKey(K key) | 返回TreeMap中严格大于给定键的最小键;
    返回TreeMap中严格小于给定键的最大键; |
    | K | ceilingKey(K key)
    floorKey(K key) | 返回TreeMap中大于或等于给定键的最小键;
    返回TreeMap中小于或等于给定键的最大键; |
    | Map.Entry<K, V> | pollFirstEntry()
    pollLastEntry() | 移除并返回TreeMap中最小的键值对
    移除并返回TreeMap中最大的键值对 |

  • LinkedHashMap:
    | 返回值 | 方法名 | 解释 |
    | — | — | — |
    | boolean | removeEldestEntry(Map.Entry<K, V> eldest) | 在插入新的键值对之后,判断是否需要移除最老的键值对。默认实现为始终返回false,即不移除最老的键值对。如果需要实现移除策略,可以重写该方法。 |

:::tips

  • 增加(put)操作:添加键值对的时间复杂度为O(log n)。
  • 删除(remove)操作:删除键值对的时间复杂度为O(log n)。
  • 修改(put)操作:修改键值对的时间复杂度为O(log n)。
  • 查找(get)操作:根据键获取值的时间复杂度为O(log n)。
    :::

5、工具类

  • 工具类设计思想
    • 构造方法用private修饰
    • 成员用public static修饰

5.1 Collections

1、Collections概述和使用

  • Collections类的作用
    是针对集合操作的工具类
  • Collections类常用方法
    | 方法名 | 说明 |
    | — | — |
    | public static void sort(List list) | 升序 |
    | public static void reverse(List list) | 反转 |
    | public static void shuffle(List list) | 随机排序 |
Collections.sort(list);
Collections.reverse(list);
Collections.shuffle(list);
  • 详细方法:
    | 返回值 | 方法名 | 解释 |
    | — | — | — |
    | void | sort(list) | 对指定的List升序排序,
    要求元素的类型实现Comparable接口 |
    | void | reverse(list) | 反转指定List中元素的顺序 |
    | int | binarySearch(list, key) | 使用二分查找算法查找已排序List指定的关键字。返回关键字在List中的索引,如果找不到则返回负数 |
    | void | shuffle(list) | 随机排列指定List中的元素 |
    | boolean | addAll(collection, elements) | 将指定元素添加到指定Collection中。
    如果Collection发生改变,则返回true。 |
    | T | max(collection)
    min(collection) | 返回集合中的最大/最小元素 |
    | int | frequency(collection, object) | 返回指定对象在指定
    Collection中出现的次数 |
    | Object[] | toArray(collection) | 将指定Collection转换为数组 |
    | Collection | synchronizedCollection(collection) | 返回指定Collection的同步
    (线程安全)版本 |

5.2 Arrays

  • Arrays的常用方法
    | 方法名 | 说明 |
    | — | — |
    | public static String toString(int[] a) | 返回指定数组的内容的字符串表达形式 |
    | public static void sort(int[] a) | 按照数字顺序排列指定的数组 |
    | public static List<?> asList(?) | 将对象数组转为List集合 |

  • 详细方法
    | 返回值 | 方法名 | 解释 |
    | — | — | — |
    | String | toString(array) | 将指定数组转换为字符串表示形式。返回的字符串包含数组的元素,以逗号分隔,并使用方括号括起来。 |
    | List | asList(array) | 将数组转换为List集合 |
    | Stream | stream(array) | 将数组转换为流(Stream)对象,
    可以进行各种流操作。 |
    | void | sort(array) | 对数组进行升序排序。要求数组元素的类型实现Comparable接口。 |
    | int | binarySearch(array, key) | 返回栈顶的元素,但不移除它 |
    | T[] | copyOf(original, newLength) | 对集合的每个剩余元素执行指定的操作 |
    | void | fill(array, value) | 将指定值填充到数组的每个元素中 |
    | int | hashCode(array) | 返回指定数组的哈希码值 |

【拓展】

HashTable/ConcurrentHashMap

  • 集合体系架构图:

mmexport1694220637139.png

  • HashTable存储发生哈希碰撞:

mmexport1694221541440.png

  • ConcurrentHashMap存储发生哈希碰撞:

mmexport1694221547566.png
当冲突链表达到一定长度时,链表会转换成红黑树。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Socket学习记录

本次学习Socket的编程开发&#xff0c;该技术在一些通讯软件&#xff0c;比如说微信&#xff0c;QQ等有广泛应用。 网络结构 这些都是计算机网络中的内容&#xff0c;我们在这里简单回顾一下&#xff1a; UDP(User Datagram Protocol):用户数据报协议;TCP(Transmission Contr…

厂家自定义 Android Ant编译流程源码分析

0、Ant安装 Windows下安装Ant&#xff1a; ant 官网可下载 http://ant.apache.org ant 环境配置&#xff1a; 解压ant的包到本地目录。 在环境变量中设置ANT_HOME&#xff0c;值为你的安装目录。 把ANT_HOME/bin加到你系统环境的path。 Ubuntu下安装Ant&#xff1a; sudo apt…

【数据结构】树和二叉树基本概念和性质

目录 前言1、树的概念1.1 树的基本概念1.2 树的主要概念1.3 树的表示1.4 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2. 二叉树概念及结构2.1 概念2.2 特殊的二叉树2.3 二叉树的性质 3. 二叉树性质相关选择题练习4. 答案和解析5. 总结 前言 本章带来数…

2024年03月 Scratch 图形化(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共18题,共50分) 第1题 运行程序后,角色一定不会说出的数字是?( ) A:2 B:4 C:6 D:8 答案:A 程序中随机数的取值最小为 2,最大为 20 ,那么随机数加上 2 之后的结果的最小值为 4 ,最大值为 22 。所…

单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 单目标问题的FW烟花优化算法求解matlab仿真,对比PSO和GA。最后将FW&#xff0c;GA&#xff0c;PSO三种优化算法的优化收敛曲线进行对比。 2.测试软件版本以及运行…

【Android项目】“追茶到底”项目介绍

没有多的介绍&#xff0c;这里只是展示我的项目效果&#xff0c;后面会给出具体的代码实现。 一、用户模块 1、注册&#xff08;第一次登陆的话需要先注册账号&#xff09; 2、登陆&#xff08;具有记住最近登录用户功能&#xff09; 二、点单模块 1、展示饮品列表 2、双向联动…

T型槽地轨承载力是如何连接整个制造过程的强力桥梁(北重公司设计)

T型槽地轨承载力的定义和计算 T型槽地轨是一种用于工业设备运输和装配的关键组件。它由世界上各行各业的生产商广泛采用&#xff0c;其有效的承载力使其成为连接整个制造过程的强力桥梁。本文将介绍T型槽地轨的承载力以及相关的设计要点和应用。 承载力的定义和计算 承载力是…

【前沿模型解析】一致性模型CM(一)| 离散时间模型到连续时间模型数学推导

文章目录 1 离散时间模型2 连续时间模型 得到 SDE 随机微分方程2.1 从离散模型到SDE的推理步骤 3 补充&#xff1a;泰勒展开近似 1 − β i \sqrt{1-\beta_i} 1−βi​ ​ CM模型非常重要 引出了LCM等一系列重要工作 CM潜在性模型的数学公式推导并不好理解 一步一步&#xf…

微信个人号开发api接口-视频号矩阵接口-VIdeosApi

友情链接&#xff1a;VIdeosApi 获取用户主页 接口地址&#xff1a; http://api.videosapi.com/finder/v2/api/finder/userPage 入参 { "appId": "{{appid}}", "lastBuffer": "", "toUserName": "v2_060000231003b2…

WP Rocket插件下载:加速您的WordPress网站,提升用户体验

在互联网速度决定用户体验的今天&#xff0c;一个快速加载的网站对于吸引和保留访问者至关重要。WP Rocket插件&#xff0c;作为一款专为WordPress设计的高性能缓存插件&#xff0c;提供了一套完整的解决方案&#xff0c;帮助您优化网站性能&#xff0c;提升用户体验。 [WP Ro…

51单片机入门:蜂鸣器

蜂鸣器介绍 蜂鸣器是一种将电信号转换为声音信号的器件&#xff0c;常用来产生设备的按键音、报警音等提示信号。 蜂鸣器的种类 1、从结构上&#xff1a;压电式蜂鸣器和电磁式蜂鸣器。 压电式蜂鸣器&#xff1a;通过压电陶瓷的压电效应原理工作的。当加有交变电压时&#xf…

【分布式 | 第五篇】何为分布式?分布式锁?和微服务关系?

文章目录 5.何为分布式&#xff1f;分布式锁&#xff1f;和微服务关系&#xff1f;5.1何为分布式&#xff1f;5.1.1定义5.1.2例子5.1.3优缺点&#xff08;1&#xff09;优点&#xff08;2&#xff09;缺点 5.2何为分布式锁&#xff1f;5.2.1定义5.2.2必要性 5.3区分分布式和微服…

Unity 性能优化之光照优化(七)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、测试目的一、实时光源是什么&#xff1f;二、开始测试1.场景中只有一个光照的数值情况2.添加4个点光源后4.结果 总结 前言 实时光源数量越多&#x…

C++类细节,面试题02

文章目录 2. 虚函数vs纯虚函数3. 重写vs重载vs隐藏3.1. 为什么C可以重载&#xff1f; 4. 类变量vs实例变量5. 类方法及其特点6. 空类vs空结构体6.1. 八个默认函数&#xff1a;6.2. 为什么空类占用1字节 7. const作用7.1 指针常量vs常量指针vs常量指针常量 8. 接口vs抽象类9. 浅…

CSS选择器、字体文本属性、三大特性、盒子模型等

目录 导入css简介HTML的局限性CSS-网页美化CSS语法规范CSS代码风格 选择器基础选择器复合选择器 CSS字体属性字体系列font-family字体大小font-size字体粗细font-weight文字样式font-style字体复合属性font CSS文本属性文本颜色color对齐文本text-align装饰文本text-decoration…

Hive数据模型

Hive数据模型 1. 表&#xff08;Table&#xff09;&#xff1a; 表是数据库中的基本组成单位&#xff0c;用于存储数据。它由一系列的行和列组成&#xff0c;每行代表一个记录&#xff0c;每列代表一种属性或字段。创建表时&#xff0c;你需要定义列的数据类型、约束和索引等信…

水电站LCU屏技术参数,应用案例解析

项目咨询请点击&#xff1a;设备自动化技术商务咨询 水电站LCU屏简介&#xff1a; 水电站LCU屏一般布置在水电站设备附近&#xff0c;对电站设备的运行工况进行实时监视和控制&#xff0c;是电站计算机监控系统的较底层控制部分。水电站一般会配置一个公用LCU屏柜&#xff0c;…

linux学习笔记——硬盘原理以及linux中的sector与block

在计算机硬盘中&#xff0c;最小的存储单位叫做扇区sector&#xff0c;0.5kb&#xff0c;多个连续扇区组合在一起形成了块block&#xff0c;最小的块包含8个扇区&#xff0c;4kb 我们可以在linux中印证 创建一个新的文件2.txt&#xff0c;查看文件大小为0k 在文件中添加字符后…

2022——蓝桥杯十三届2022国赛大学B组真题

问题分析 看到这个问题的同学很容易想到用十层循环暴力计算&#xff0c;反正是道填空题&#xff0c;一直算总能算得出来的&#xff0c;还有些同学可能觉得十层循环太恐怖了&#xff0c;写成回溯更简洁一点。像下面这样 #include <bits/stdc.h> using namespace std; in…

大厂Java面试题:MyBatis是如何进行分页的?分页插件的实现原理是什么?

大家好&#xff0c;我是王有志。 今天给大家带来的是一道来自京东的关于 MyBatis 实现分页功能的面试题&#xff1a;MyBatis是如何进行分页的&#xff1f;分页插件的实现原理是什么&#xff1f;通常&#xff0c;分页的方式可以分为两种&#xff1a; 逻辑&#xff08;内存&…