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

(八)Java-Collection

一、Collection接口

1.特点

Collection实现子类可以存放多个元素,每个元素可以是Object;

有些Collection的实现类,可以存放重复的元素,有些不可以;

有些Collection的实现类,有些是有序的(List),有些则不是有序(Set);

Collection接口没有直接的实现子类,通过其子接口List和Set来实现的。

2.方法

add : 添加单个元素;

remove : 删除指定元素;

contains : 查找元素是否存在;

size : 获取元素个数;

isEmpty : 判断是否为空;

clear : 清空;

addAll : 添加多个元素;

containaAll :查找多个元素是否都存在;

removeAll : 删除多个元素。

3.遍历

Iterator(迭代器)(不推荐使用)

增强 for 循环

二、List

1.特点

List集合类中元素有序(即添加和取出顺序一致),且可重复;

List集合中的每个元素都有其对应的顺序索引,即支持索引

List容器中的元素都对应一个整数型的序号记录其在容器中的位置,根据序号存取容器中的元素;

List常用接口有 ArrayList、LinkedList、Vector。

2.方法

void add (int index,Object ele) :在index位置插入ele元素;

boolean addAll (int index,Collection eles) :从index位置开始将eles集合中的所有元素添加进来;

Object get (int index) :获取指定index位置的元素;

int indexOf (Object obj) :返回obj在集合中首次出现的位置;

int lastIndexOf (Object obj) :返回obj在集合中末次出现的位置;

Object remove (int index) :移除指定index位置的元素,并返回此元素;

Object set (int index,Object ele) :设置指定index的位置的元素为ele,相当于是替换;

List subList (int fromIndex,int toIndex) :返回从fromIndex到toIndex位置的子集合。

3.遍历

Iterator(迭代器)(不推荐使用)

增强 for 循环

普通for循环

4.实现

ArrayList、LinkedList、Vector的比较:

三、ArrayList

1.概述

底层实现:实现了 List 接口,基于动态数组。

特点:有序、可重复、动态大小。

初始容量:10

扩充机制:1.5倍(内部通过 grow() 方法完成扩容)

访问速度:时间复杂度为 O(1),随机访问速度快。

增删速度:时间复杂度为 O(n),插入和删除速度较慢,尤其是在列表中间插入或删除时,因为需要移动大量元素。

线程安全性:不是线程安全的。

常用场景:适用于频繁读取而不频繁插入或删除的场景。

2.构造方法

ArrayList()                   

// 默认构造方法,创建一个容量为 10 的空列表

ArrayList(int initialCapacity)

// 创建一个指定初始容量的空列表

ArrayList(Collection<? extends E> c)

// 创建一个包含指定集合元素的列表

3.常用方法

add(E e):将指定元素添加到列表的末尾。

add(int index, E element):将指定元素添加到指定位置。

get(int index):返回指定索引处的元素。

set(int index, E element):用指定元素替换指定位置的元素。

remove(int index):删除指定位置的元素,并返回该元素。

remove(Object o):删除列表中第一次出现的指定元素,如果元素不存在则返回 false。

clear():删除列表中的所有元素。

size():返回列表中元素的数量。

isEmpty():如果列表为空,返回 true。

contains(Object o):判断列表中是否包含指定元素。

indexOf(Object o):返回指定元素第一次出现的索引,找不到返回 -1。

lastIndexOf(Object o):返回指定元素最后一次出现的索引。

toArray():将列表转换为一个普通数组。

toArray(T[] a):将列表转换为指定类型的数组。

4.线程安全

使用 Collections.synchronizedList() 方法:

List<String> list = Collections.synchronizedList(new ArrayList<>())

使用 CopyOnWriteArrayList()方法(是一个线程安全的变体,适合读多写少的场景):

List<String> list = new CopyOnWriteArrayList<>()

四、Vector

1.概述

底层实现:实现了 List 接口,并继承自 AbstractList 类,基于动态数组,类似于 ArrayList。

特点:有序、可重复、动态大小。

初始容量:10

扩充机制:2倍(内部通过 grow() 方法完成扩容/可指定增量

访问速度:时间复杂度为 O(1),随机访问速度快。

增删速度:时间复杂度为 O(n),插入和删除速度较慢。

线程安全性:线程安全,因为所有的方法都是同步的。

常用场景:适用于需要线程安全且不特别关注性能的场景。由于同步的开销,相较于 ArrayList 性能会有所下降。

// 创建一个初始容量为 5,容量增量为 3 的 Vector

Vector<Integer> vector = new Vector<>(5, 3);

2.构造方法

Vector()                   

// 默认构造方法,创建一个容量为 10 的空向量

Vector(int initialCapacity)

// 创建一个指定初始容量的空向量

Vector(int initialCapacity, int capacityIncrement)

// 创建一个指定初始容量和扩展大小的空向量

Vector(Collection<? extends E> c)

// 创建一个包含指定集合元素的向量

3.常用方法

add(E e):将指定元素添加到向量的末尾;

add(int index, E element):将指定元素插入到指定位置;

addElement(E obj):将指定元素添加到向量的末尾( Vector特有方法);

get(int index):返回指定位置的元素;

set(int index, E element):用指定元素替换指定位置的元素;

elementAt(int index):返回指定位置的元素(Vector特有方法);

firstElement():返回向量中的第一个元素;

lastElement():返回向量中的最后一个元素;

remove(int index):删除指定位置的元素,并返回该元素;

remove(Object o):删除列表中第一次出现的指定元素;

removeElement(Object obj):删除指定的元素;

removeAllElements():删除所有元素;

size():返回向量的大小,即元素的个数;

isEmpty():如果向量为空,返回 true;

contains(Object o):判断向量中是否包含指定的元素;

indexOf(Object o):返回指定元素第一次出现的索引,找不到返回 -1;

lastIndexOf(Object o):返回指定元素最后一次出现的索引;

toArray():将向量转换为一个普通数组;

toArray(T[] a):将向量转换为指定类型的数组;

iterator():返回一个迭代器,用于遍历向量。

五、LinkedList

1.概述

底层实现:基于链表,由一系列的节点(Node)组成,每个节点包含两个部分。

数据部分:存储实际的数据。

指针部分:指向下一个节点的引用(或者在双向链表中,指向前一个节点和下一个节点的引用)。

特点:有序,可重复,动态大小,内存开销大。

访问速度:随机访问速度较慢,需要从头开始遍历。

增删速度:插入和删除速度较快,只需更改指针而不移动元素。

线程安全性:不是线程安全的。

常用场景:适用于频繁插入和删除操作的场景。

2.基本类型

单向链表:

每个节点有一个数据部分和一个指向下一个节点的指针。链表的末尾节点的指针指向 null。

双向链表:

每个节点有两个指针:一个指向下一个节点,另一个指向前一个节点。

循环链表:

单向链表或双向链表的变体,末尾节点指向头节点(而不是 null),形成一个环。

3.操作

插入:

在头部插入(头插法)、在尾部插入(尾插法)、在指定位置插入。

删除:

删除头节点、删除尾节点、删除指定位置的节点。

查找:

查找链表中的元素,可以通过遍历链表逐一比较每个节点的值。

更新:

更新链表中的某个节点的值,首先找到该节点,再修改其数据部分。

4.时间复杂度

插入和删除操作:

  在链表的头部插入或删除:O(1)

  在链表的尾部插入或删除:O(1)(但如果没有尾指针则需要 O(n))

在中间插入或删除:

  O(n)(需要遍历到特定位置)

查找操作:

  O(n)(必须遍历链表才能找到特定元素)

访问操作:

  O(n)(无法直接通过索引访问,必须从头开始遍历)

六、Set

1.特点

无序(添加和取出的顺序不一致),没有索引

不允许重复元素,所以最多包含一个null

Set的常用实现类有:HashSet、LinkedHashSet和TreeSet。

2.遍历

Iterator(迭代器)(不推荐使用)

增强 for 循环

3.线程安全

CopyOnWriteArraySet(基于 CopyOnWriteArrayList)

4.实现

HashSet、LinkedHashSet、TreeSet和CopyOnWriteArraySet比较:

七、HashSet

1.概述

底层实现:基于哈希表(HashMap)实现,使用哈希算法来存储元素。

特点:无序、不可重复,高效。

初始容量:16     

负载因子:0.75

扩充机制:条目数 > 容量 × 负载因子,哈希表将会自动增加桶的数量,一般是当前容量的两倍(rehashing),会重新计算所有现有元素的存储位置。

存储规则:存储的元素不可重复,元素在 HashSet 中没有顺序,即元素存储的顺序不一定与插入顺序相同。

增删速度:一般为时间复杂度O(1),最坏为O(n)。

线程安全性:线程不安全。

场景:适用于需要高效地添加、删除和查找元素,并且不关心元素的顺序。

2.哈希值和哈希冲突

  HashSet 使用元素的 hashCode() 方法来决定元素的存储位置。如果两个不同的元素有相同的哈希值,就会发生哈希冲突。为了减少冲突,HashSet 会使用链表或红黑树等结构来存储具有相同哈希值的元素。通过 equals() 方法判断两个元素是否相等。

hashCode():返回一个整数值,表示对象的哈希值。这个哈希值用于决定对象在哈希表中的存储位置。

equals():用于比较两个对象是否相等。

3.常用方法

add(E e):将指定元素添加到集合中;

remove(Object o):从集合中移除指定元素,如果集合中包含该元素;

contains(Object o):检查集合中是否包含指定元素o;

size():返回集合中元素的数量;

isEmpty():检查集合是否为空;

clear():清空集合中的所有元素。

八、LinkedHashSet

1.概述

底层实现:继承HashSet,实现了Set接口;结合了哈希表和链表的特性。

特点:插入有序、不可重复、性能低于HashSet。

初始容量:16     负载因子:0.75

扩充机制:同HashSet。

存储规则:根据元素的 hashCode 值来决定元素的存储位置,同时使用链表维护元素的次序。

查增删速度:平均情况下为 O(1)。

线程安全性:线程不安全。

场景:维护元素的插入顺序、去重并保留顺序、性能要求不高,但需要顺序。

2.构造方法

// 创建一个空的 LinkedHashSet,默认初始容量 16,负载因子 0.75

LinkedHashSet<E> set1 = new LinkedHashSet<>();

// 创建一个指定初始容量的 LinkedHashSet

LinkedHashSet<E> set2 = new LinkedHashSet<>(int initialCapacity);

// 创建一个指定初始容量和负载因子的 LinkedHashSet

LinkedHashSet<E> set3 = new LinkedHashSet<>(int initialCapacity, float loadFactor);

// 使用一个现有的集合创建一个 LinkedHashSet

LinkedHashSet<E> set4 = new LinkedHashSet<>(Collection<? extends E> c);

3.常见方法

add(E e):添加元素;

remove(Object o):删除指定元素;

contains(Object o):是否存在;

size():返回元素的数量;

clear():清空集合;

isEmpty():是否为空;

iterator():返回一个迭代器,遍历集合;

forEach():使用 forEach() 方法遍历集合。

、TreeSet

1.概述

底层实现:基于红-黑树(一种自平衡的二叉查找树)实现。

特点:有序、不可重复、高效、支持 NavigableSet 接口。

存储规则:存储的元素不可重复,元素有序,按照自然顺序或者指定的比较器进行排序。如果元素是自定义对象,则需要实现 Comparable 接口或者提供 Comparator。

增删速度:时间复杂度 O(log n)。

线程安全性:线程不安全。

场景:适用于需要元素有序存储,并且支持自然顺序或者自定义排序规则。

2.底层解析

红黑树具有以下特性:

每个节点要么是红色,要么是黑色。

根节点始终是黑色的。

每个叶子节点(NIL)是黑色的。

如果一个红色节点有子节点,那么该子节点必须是黑色的。

从任何节点到其所有后代叶节点的路径上,必须包含相同数量的黑色节点。

3.常见操作和方法

add(E e):添加元素;

remove(Object o):删除指定元素;

contains(Object o):检查指定元素是否存在;

size():返回元素数量;

first():返回集合中的第一个元素,即最小的元素;

last():返回集合中的最后一个元素,即最大的元素;

headSet(E toElement):返回一个视图,小于 toElement 的所有元素;

tailSet(E fromElement):返回一个视图,大于等于 fromElement 所有元素;

subSet(E fromElement, E toElement):返回一个视图,包含在 fromElement 和 toElement 之间的元素;

pollFirst():移除并返回最小元素(即第一个元素);

pollLast():移除并返回最大元素(即最后一个元素)。

十、CopyOnWriteArrayList

 是Java中一个线程安全的List实现类,属于 java.util.concurrent包。与常见的 ArrayList 相比,CopyOnWriteArrayList 的一个显著特点是写操作时会复制数组,从而保证线程安全。

1.概述

底层数据结构:动态数组,通过复制数组的方式来实现对集合的写操作。

对于写操作,会创建一个新的内部数组,然后将数据复制到这个新数组中,修改操作只会作用于这个新数组。这意味着写操作的成本较高。

主要特点:有序、可重复,读操作不受影响,写操作代价较高。

初始容量:0 (可指定)

时间复杂度:读:O(1)或O(n),其他:O(n)。

线程安全性:线程安全。

应用场景:适用于对并发读有较高需求,但写操作较少的场景,如缓存、事件监听、日志记录等。

2.构造方法

// 创建一个空的 CopyOnWriteArrayList

CopyOnWriteArrayList<E> list = new CopyOnWriteArrayList<>();

// 创建一个包含指定元素的 CopyOnWriteArrayList

CopyOnWriteArrayList<E> list2 = new CopyOnWriteArrayList<>(Collection<? extends E> c);

// 创建一个包含指定容量的 CopyOnWriteArrayList

CopyOnWriteArrayList<E> list3 = new CopyOnWriteArrayList<>(Object[] array);

3.常见操作和方法

add(E e):将元素添加到末尾;

remove(Object o):删除指定的元素;

get(int index):获取指定索引位置的元素;

set(int index, E element):替换指定位置的元素,实际上是通过复制数组来实现的,性能开销较大;

size():返回元素个数;

contains(Object o):是否包含指定元素;

clear():清空所有元素,实际上是通过创建一个新的空数组实现的;

iterator():返回一个迭代器,该迭代器支持并发读取;

forEach():遍历集合。

3.优缺点

优点:CopyOnWriteArrayList 提供了高效的并发读操作,适用于读多写少的场景,能保证线程安全。

缺点:由于写操作的开销较大,因此不适用于写操作频繁的场景。

十一、CopyOnWriteArraySet

  是一个线程安全的集合类,基于 CopyOnWriteArrayList 实现,用于提供高效的读取操作和线程安全的写入操作。

  与 HashSet 和 TreeSet 等传统集合不同,它采用 Copy-On-Write(写时复制)策略,意味着每次对集合进行修改(如添加或删除元素)时,都会复制底层的数组,并将修改应用到新数组中,而不是直接修改原数组。这使得 CopyOnWriteArraySet 特别适合于读多写少的场景。

1.概述

底层数据结构:基于CopyOnWriteArrayList,动态数组。实现了 Set 接口。

主要特点:无序、不可重复,高效的读操作,写操作代价较高

时间复杂度:读O(1)或O(n),写O(n)。

线程安全性:线程安全。

应用场景:读多写少的应用、需要线程安全的应用、高并发环境。

2.常用操作

添加元素 (add(E e));

删除元素 (remove(Object o));

检查元素是否存在 (contains(Object o));

获取集合大小 (size());

清空集合 (clear());

迭代器 (iterator())。

十二、Collections

  是 Java 提供的一个工具类,位于 java.util 包中,包含了多个静态方法,旨在对集合框架中的集合对象进行操作和增强功能。它提供了对集合的排序、查找、同步化、反转、填充等操作的支持,简化了集合类的使用和操作。

1.排序

升序排序:

sort(List<T> list)

List<Integer> list = Arrays.asList(5, 2, 8, 1, 4);

Collections.sort(list);

// [1, 2, 4, 5, 8]

根据指定的比较器 Comparator 对列表进行排序:

sort(List<T> list, Comparator<? super T> c)

List<String> list = Arrays.asList("banana", "apple", "cherry");

Collections.sort(list, Comparator.reverseOrder());

// ["cherry", "banana", "apple"]

2.查找最大值和最小值

(1)返回集合中的最大/小元素,依据元素的自然顺序:

max(Collection<? extends T> coll)

min(Collection<? extends T> coll)

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Integer max = Collections.max(list); // 5

Integer min = Collections.min(list); // 1

(2)根据给定的比较器返回集合中的最大/小元素:

max(Collection<? extends T> coll, Comparator<? super T> comp)

min(Collection<? extends T> coll, Comparator<? super T> comp)

List<String> list = Arrays.asList("apple", "banana", "cherry");

String max = Collections.max(list, Comparator.reverseOrder());

// "cherry"

String min = Collections.min(list, Comparator.reverseOrder());

// "apple"

3.反转和旋转

反转列表中元素的顺序:

reverse(List<?> list)

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Collections.reverse(list); // [5, 4, 3, 2, 1]

将列表中的元素按指定距离旋转。正数表示向右旋转,负数表示向左旋转:

rotate(List<?> list, int distance)

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Collections.rotate(list, 2); // [4, 5, 1, 2, 3]

4.填充和替换

用指定的对象填充整个列表中的元素:

fill(List<? super T> list, T obj)

List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));

Collections.fill(list, "x"); // ["x", "x", "x"]

替换列表中所有等于 oldVal 的元素为 newVal:

replaceAll(List<T> list, T oldVal, T newVal)

List<String> list =

new ArrayList<>(Arrays.asList("apple", "banana", "apple"));

Collections.replaceAll(list, "apple", "orange");

// ["orange", "banana", "orange"]

5.线程安全集合

返回一个线程安全的列表,所有的操作都会通过同步来确保线程安全:

synchronizedList(List<T> list)

List<Integer> list = new ArrayList<>();

List<Integer> synchronizedList = Collections.synchronizedList(list);

返回一个线程安全的集合,所有操作都会通过同步来确保线程安全:

synchronizedSet(Set<T> s)

Set<Integer> set = new HashSet<>();

Set<Integer> synchronizedSet = Collections.synchronizedSet(set);

返回一个线程安全的映射,所有操作都会通过同步来确保线程安全:

 synchronizedMap(Map<K, V> m)

Map<String, Integer> map = new HashMap<>();

Map<String, Integer> synchronizedMap =

Collections.synchronizedMap(map);

6.空集合和常量集合

(1)返回一个空列表。返回的列表是不可修改的:

emptyList() 、emptySet()

List<String> emptyList = Collections.emptyList(); // []

Set<String> emptySet = Collections.emptySet(); // []

(2)返回一个空映射。返回的映射是不可修改的:

emptyMap()

Map<String, String> emptyMap = Collections.emptyMap(); // {}

(3)返回一个只包含指定元素的不可修改的列表:

singletonList(T o)、singleton(T o)

List<String> singletonList = Collections.singletonList("apple");

// ["apple"]

Set<String> singletonSet = Collections.singleton("apple");

// ["apple"]

(4)返回一个只包含一个映射的不可修改的映射:

singletonMap(K key, V value)

Map<String, String> singletonMap =

Collections.singletonMap("key", "value");

// {"key"="value"}

7. 其他常用方法

(1)shuffle(List<?> list)

随机打乱列表中的元素。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Collections.shuffle(list); // 列表顺序会随机改变

(2)unmodifiableList(List<? extends T> list)

返回一个不可修改的列表,修改会抛出 UnsupportedOperationException。

List<String> list = Arrays.asList("apple", "banana", "cherry");

List<String> unmodifiableList = Collections.unmodifiableList(list);

(3)unmodifiableSet(Set<? extends T> s)

返回一个不可修改的集合,修改会抛出 UnsupportedOperationException。

Set<String> set = new HashSet<>(Arrays.asList("apple", "banana"));

Set<String> unmodifiableSet = Collections.unmodifiableSet(set);

(4)unmodifiableMap(Map<? extends K, ? extends V> m)

返回一个不可修改的映射,修改会抛出 UnsupportedOperationException。

Map<String, String> map = new HashMap<>();

map.put("key1", "value1");

Map<String, String> unmodifiableMap = Collections.unmodifiableMap(map);

十三、其他API工具

1.Guava

  提供了丰富的集合框架、缓存、字符串处理、并发工具等功能。

(1)增强的集合类型

ImmutableList / ImmutableSet / ImmutableMap: 不可变集合,线程安全且不易被修改。

Multiset: 允许重复元素的集合,可以统计元素的出现次数。

Multimap: 键到多个值的映射,支持一个键对应多个值。

BiMap: 双向映射,键和值都是唯一的。

(2)缓存

Cache: 提供高效的缓存实现,支持过期策略和容量限制。

(3)字符串处理

Joiner: 简化字符串拼接的操作。

Splitter: 方便地将字符串分割成集合。

(4)并发工具

ListenableFuture: 扩展了 Future 的功能,支持回调机制。

RateLimiter: 控制方法调用频率。

(5)其他实用工具

Optional: 提供对可能为 null 的值的优雅处理,减少 null 引用带来的问题。

Preconditions: 提供参数检查工具,确保方法参数的有效性。

2.Apache Commons Collections

(1)主要特性

额外的集合类型:

  Bag: 允许重复元素的集合,并支持计数功能。

  MultiValuedMap: 每个键可以对应多个值的映射。

  TreeSortedSet: 有序集合,基于红黑树实现。

(2)装饰器模式

通过装饰器模式增强已有集合的功能,比如创建只读集合、同步集合等。

示例:SynchronizedCollection 可以为集合提供线程安全的访问。

(3)过滤器和转换器

提供多种过滤器和转换器,可以对集合进行操作,比如只保留特定条件的元素或转换元素类型。

(4)集合工具

提供各种静态方法用于操作集合,如合并、差集、交集等。

示例:CollectionUtils 类提供了很多便利的方法。

(5)快速查找和排序

提供高效的查找和排序算法,特别是对于大量数据的处理。

相关文章:

(八)Java-Collection

一、Collection接口 1.特点 Collection实现子类可以存放多个元素&#xff0c;每个元素可以是Object&#xff1b; 有些Collection的实现类&#xff0c;可以存放重复的元素&#xff0c;有些不可以&#xff1b; 有些Collection的实现类&#xff0c;有些是有序的&#xff08;Li…...

从单片机的启动说起一个单片机到点灯发生了什么下——使用GPIO点一个灯

目录 前言 HAL库对GPIO的抽象 核心分析&#xff1a;HAL_GPIO_Init 前言 我们终于到达了熟悉的地方&#xff0c;对GPIO的初始化。经过漫长的铺垫&#xff0c;我们终于历经千辛万苦&#xff0c;来到了这里。关于GPIO的八种模式等更加详细的细节&#xff0c;由于只是点个灯&am…...

C++ | 哈希表

前言 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 —…...

leetcode_动态规划/递归 70. 爬楼梯

70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 思路&#xff1a; 考虑: 假设现在已经爬到了某一阶台阶&#xff0c;那是如何到达这里的呢&#xff1f;可能是从前一阶台阶爬上来的&am…...

基于Rook的Ceph云原生存储部署与实践指南(上)

#作者&#xff1a;任少近 文章目录 1 Ceph环境准备2 rook部署ceph群集2.1 Rook 帮助地址2.2 安装ceph2.3 获取csi镜像2.4 Master参加到osd2.5 设置默认存储 3 Rook部署云原生RBD块存储3.1 部署storageclass资源3.2 部署WordPress使用RBD3.3 WordPress访问 4 Rook部署云原生RGW…...

C++ Qt常见面试题(4):Qt事件过滤器

在 Qt 中,事件过滤器(Event Filter)提供了一种机制,可以拦截并处理对象的事件(如鼠标事件、键盘事件等),在事件到达目标对象之前对其进行预处理。事件过滤器通常用于以下场景: 捕获和处理特定的事件(如鼠标点击、按键等);对事件进行筛选或修改;实现全局的事件监听功…...

regionserver实例僵住问题分析

问题现象: 应用提交超时,发现regionserver实例异常。hbase原生页面这个实例dead,业务连接到这个rs的进程超时8个regionserver实例。 D08在18:30分后显示warning,应用提交任务到这个rs节点超时,hbase控制台不显示d08的rs信息了。19:30在页面停止rs实例失败,然后kill进程…...

服务器离线部署DeepSeek

目标 本次部署的目标是在本地服务器上部署DeepSeek。但是该服务不能连接外网&#xff0c;因此只能使用离线部署的方式。为了一次完成部署。现在云服务器上进行尝试。 云服务器部署尝试 云服务器配置 CentOS72080Ti 11GB 安装准备 1、上传iso并配置为本地yum源 安装前先将…...

QT mac系统下qml实现的菜单栏,标准快捷键Delete无作用或失灵的处理

一.在mac系统下,QT官方提供的删除快捷键无作用。 1.下面这一段代码,最后一个menuItem采用的是QT自带的标准快捷键,但是在使用的过程中,快捷键无响应。大家可以将代码带入简单的demo尝试一下: MenuBar {id: rootMenu {id: editMenutitle: TransText.titleBar_EditMenuItem…...

redis序列化设置

redis序列化设置 redis序列化设置序列化对象里有org.joda.time.DateTime1&#xff09;、报错内容如下2&#xff09;、解决方案&#xff1a;分别自定义时间的序列化和反序列化&#xff0c;以对象形式关联到redisTemplate redis序列化设置 redis序列化设置&#xff0c;通过自定义…...

浅谈C++/C命名冲突

前言 在这里我会简要地介绍产生命名冲突的原因&#xff0c;和C中处理命名冲突的方法&#xff0c;同时和C语言的解决办法进行比较。 相信你在阅读完之后一定会有收获。对于我们来说&#xff0c;了解编译器的编译链接过程才能更好的理解编译器是如何报错的&#xff0c;更能让我们…...

【语音编解码】常用的基于神经网络的语音编解码方案对比

引言 随着实时通信与多媒体应用的爆炸式增长&#xff0c;传统语音编解码技术正面临带宽效率与音质保真的双重挑战。近年来&#xff0c;基于深度学习的神经编解码器突破性地将端到端架构、动态码率控制与可解释信号处理相结合&#xff0c;在3kbps以下超低码率场景仍能保持自然语…...

PVE 配置显卡直通

博客地址&#xff1a;PVE 配置显卡直通 配置 Device: Dell PowerEdge T630CPU: Intel Xeon E5-2696 v4 x2GPU 1: Matrox Electronics Systems Ltd. G200eR2GPU 2: NVIDIA GeForce GTX 1060 3GBOS: Proxmox VE bookworm 8.3.1 x86_64 注意事项 硬件需支持并在 BIOS 中开启 I…...

Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来

Kronecker分解&#xff08;K-FAC&#xff09;&#xff1a;让自然梯度在深度学习中飞起来 在深度学习的优化中&#xff0c;自然梯度下降&#xff08;Natural Gradient Descent&#xff09;是一个强大的工具&#xff0c;它利用Fisher信息矩阵&#xff08;FIM&#xff09;调整梯度…...

ArcGIS Pro技巧实战:高效矢量化天地图地表覆盖图

在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;地表覆盖图的矢量化是一项至关重要的任务。天地图作为中国国家级的地理信息服务平台&#xff0c;提供了丰富且详尽的地表覆盖数据。然而&#xff0c;这些数据通常以栅格格式存在&#xff0c;不利于进行空间分析和数据…...

React + TypeScript 数据模型驱动数据字典生成示例

React TypeScript 数据模型驱动数据字典生成示例 引言&#xff1a;数据字典的工程价值 在现代化全栈开发中&#xff0c;数据字典作为业务实体与数据存储的映射桥梁&#xff0c;直接影响系统可维护性与团队协作效率。传统手动维护字典的方式存在同步成本高和版本管理混乱两大痛…...

道可云人工智能每日资讯|深圳将设立人工智能和机器人产业基金

道可云元宇宙每日简报&#xff08;2025年2月26日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 上海青浦发布国际产业协作元宇宙平台 近日&#xff0c;“2025出海企业与跨境专业服务论坛”在上海青浦区徐泾镇举行。论坛上重磅发布三大全球化服务平台&#xff0c…...

[2024年下半年架构师考试真题之论文]

2024论文真题试题一(架构) 论面向服务的架构设计 Web service 是一种通过互联网协议(如 HTTP)来提供服务的软件系统,它允许不同的应用程序之间进行交互,而无需考虑它们所使用的操作系统、编程语言或硬件平台。其本质是将应用程序的功能以服务的形式暴露出来,使得其他应…...

神经网络 - 激活函数(Sigmoid 型函数)

激活函数在神经元中非常重要的。为了增强网络的表示能力和学习能力&#xff0c;激活函数需要具备以下几点性质: (1) 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数. (2) 激活函数及其导函数要尽可能的简单&#xff0…...

阿里云 | 快速在网站上增加一个AI助手

创建智能体应用 如上所示&#xff0c;登录阿里云百炼人工智能业务控制台&#xff0c;创建智能体应用&#xff0c;智能体应用是一个agent&#xff0c;即提供个人或者企业的代理或中间件组件应用&#xff0c;对接阿里云大模型公共平台&#xff0c;为个人或者企业用户提供大模型应…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题&#xff1a;IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;将编译的堆内存增加一点 位置&#xff1a;设置setting-》构建菜单build-》编译器Complier...