Java中的Set、List、Map的区别及主要实现类方法
Java中的Set、List、Map的区别
数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据。 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型。
JAVA集合主要分为三种类型:
- Set(集)
- List(列表)
- Map(映射)
Set、List和Map是Java集合框架中的三种不同的接口,它们各自有不同的特点和用途。
- Set:
- Set是一种集合,用于存储
不重复的元素。 - Set接口的实现类通常使用哈希表或树等数据结构来实现元素的存储和去重。
- Set中的元素没有特定的顺序,即不保证元素的插入顺序和访问顺序。
- 常见的Set接口的实现类有HashSet、LinkedHashSet和TreeSet。
- Set是一种集合,用于存储
- List:
- List是一种有序集合,允许存储
重复的元素。 - List接口的实现类通常使用数组或链表等数据结构来实现元素的存储和有序访问。
- List中的元素有索引,可以根据索引进行访问、插入和删除操作。
- List中的元素是有序的,即保持插入顺序。
- 常见的List接口的实现类有ArrayList、LinkedList和Vector。
- List是一种有序集合,允许存储
- Map:
- Map是一种
键值对的映射集合,用于存储键值对关系。 - Map中的键是唯一的,值可以重复。
- Map接口的实现类通常使用哈希表、树或链表等数据结构来实现键值对的存储和查找。
- Map中的键值对没有特定的顺序,即不保证键值对的插入顺序和访问顺序。
- 常见的Map接口的实现类有HashMap、TreeMap。
- Map是一种
总结:
- Set用于存储不重复的元素,List用于存储有序的元素序列,Map用于存储键值对映射关系。
- Set和List都是集合,而Map是映射。
- Set和Map中的元素没有特定的顺序,而List中的元素是有序的。
Collection 接口 :Collection是最基本的集合接口,声明了适用于JAVA集合(只包括Set和List)的通用方法。 Set 和List 都继承了Conllection,Map
Collection接口的方法
Collection接口是Java集合框架的根接口,它定义了操作集合的基本方法。下面是Collection接口中的主要方法:
- int size():返回集合中的元素数量。
- boolean isEmpty():如果集合中没有元素,则返回true;否则返回false。
- boolean contains(Object o):如果集合中包含指定的元素,则返回true。
- boolean add(E e):将指定的元素添加到集合中。如果集合因为元素的存在而发生改变,则返回true。
- boolean remove(Object o):从集合中移除指定的元素。如果集合包含了该元素,则返回true。
- boolean containsAll(Collection<?> c):如果集合中包含指定集合中的所有元素,则返回true。
- boolean addAll(Collection<? extends E> c):将指定集合中的所有元素添加到集合中。如果集合因为添加元素而发生改变,则返回true。
- boolean removeAll(Collection<?> c):从集合中移除指定集合中的所有元素。如果集合因为移除元素而发生改变,则返回true。
- boolean retainAll(Collection<?> c):仅保留集合中包含在指定集合中的元素,移除其他元素。如果集合因为保留元素而发生改变,则返回true。
- void clear():从集合中移除所有的元素。
- Object[] toArray():返回包含集合所有元素的数组。
- T[] toArray(T[] a):返回包含集合所有元素的数组,并将其存储在指定的数组中。如果指定的数组大小足够大,并且集合可以适应指定的数组,则将元素存储在该数组中。否则,将分配一个新的数组,其运行时类型是指定数组的运行时类型,具有相同的大小。
Iterator接口方法
-
boolean hasNext():如果迭代器还有元素可以遍历,则返回true;否则返回false。
-
E next():返回迭代器中的下一个元素,并将迭代器的位置向后移动。
-
void remove():从集合中移除迭代器最后返回的元素。这个方法只能在调用
next()方法之后且在调用remove()方法之前调用一次,否则会抛出IllegalStateException异常。 -
Set(): Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。 Set接口主要实现了两个实现类:
- HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快
- TreeSet:TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。
Set 的用法
Set是一种集合类型,它表示一组唯一的对象,不允许重复。Set接口继承自Collection接口,常用的实现类有HashSet、LinkedHashSet和TreeSet。
Set接口的主要方法
- add(E e):将指定的元素添加到集合中。如果集合中已经包含了该元素,则不会添加,并返回false;否则将元素添加到集合中,并返回true。
- remove(Object o):从集合中移除指定的元素。如果集合中包含了该元素,则移除并返回true;否则返回false。
- contains(Object o):判断集合中是否包含指定的元素。如果集合中包含了该元素,则返回true;否则返回false。
- size():返回集合中元素的数量。
- isEmpty():判断集合是否为空。如果集合中没有元素,则返回true;否则返回false。
- clear():清空集合中的所有元素。
Set接口的主要实现类
- HashSet:基于哈希表实现的Set,不保证元素的顺序,不允许有重复元素。它提供了常数时间的基本操作,如添加、移除、包含等。
- LinkedHashSet:基于哈希表和链表实现的Set,它维护了元素的插入顺序,可以通过迭代器按照插入顺序遍历集合中的元素。
- TreeSet:基于红黑树实现的Set,它可以对元素进行排序,并且不允许有重复元素。元素可以根据它们的自然顺序或者通过提供的比较器进行排序。
HashSet()的常用方法
HashSet是Set接口的一个实现类,它基于哈希表实现,不保证元素的顺序,不允许有重复元素。
- add(E e):将指定的元素添加到集合中。如果集合中已经包含了该元素,则不会添加,并返回false;否则将元素添加到集合中,并返回true。
- remove(Object o):从集合中移除指定的元素。如果集合中包含了该元素,则移除并返回true;否则返回false。
- contains(Object o):判断集合中是否包含指定的元素。如果集合中包含了该元素,则返回true;否则返回false。
- size():返回集合中元素的数量。
- isEmpty():判断集合是否为空。如果集合中没有元素,则返回true;否则返回false。
- clear():清空集合中的所有元素。
这些方法是HashSet的基本用法,通过它们可以实现对集合中元素的添加、移除、判断、获取以及清空等操作。
由于HashSet不保证元素的顺序,因此遍历的结果可能是无序的。
TreeSet()的常用方法
TreeSet是Set接口的一个实现类,它基于红黑树(Red-Black tree)实现,可以对元素进行排序。
- add(E e):将指定的元素添加到集合中。如果集合中已经包含了该元素,则不会添加,并返回false;否则将元素添加到集合中,并返回true。
- remove(Object o):从集合中移除指定的元素。如果集合中包含了该元素,则移除并返回true;否则返回false。
- contains(Object o):判断集合中是否包含指定的元素。如果集合中包含了该元素,则返回true;否则返回false。
- size():返回集合中元素的数量。
- isEmpty():判断集合是否为空。如果集合中没有元素,则返回true;否则返回false。
- clear():清空集合中的所有元素。
- first():返回集合中的第一个(最小)元素。
- last():返回集合中的最后一个(最大)元素。
- lower(E e):返回小于给定元素的最大元素,如果不存在,则返回null。
- higher(E e):返回大于给定元素的最小元素,如果不存在,则返回null。
- floor(E e):返回小于等于给定元素的最大元素,如果不存在,则返回null。
- ceiling(E e):返回大于等于给定元素的最小元素,如果不存在,则返回null。
- pollFirst():移除并返回集合中的第一个(最小)元素。
- pollLast():移除并返回集合中的最后一个(最大)元素。
- iterator():返回一个迭代器,可以在集合中迭代元素的顺序是按照元素的自然顺序。
这些方法是TreeSet的基本用法,通过它们可以实现对集合中元素的添加、移除、判断、获取以及清空等操作,以及获取集合中的第一个元素、最后一个元素,以及执行与有序集合相关的操作。
由于TreeSet基于红黑树实现,因此元素在遍历时会按照它们的自然顺序或者自定义的比较器进行排序。
HashSet和TreeSet区别
HashSet基于哈希表实现,无序且快速,适合查找;TreeSet基于红黑树实现,有序且支持排序,适合有序集合操作。
HashSet和TreeSet是Java中Set接口的两个主要实现类,它们之间有以下区别:
- 底层数据结构:
HashSet基于哈希表实现,使用哈希表存储元素,不保证元素的顺序,不允许有重复元素。TreeSet基于红黑树实现,使用树结构存储元素,可以对元素进行排序,并且不允许有重复元素。
- 元素顺序:
HashSet不维护元素的顺序,即元素在集合中的顺序是不确定的。TreeSet维护元素的排序顺序,可以根据元素的自然顺序或者提供的比较器进行排序。因此,TreeSet中的元素是有序的。
- 性能:
HashSet的基本操作(添加、删除、包含)具有常数时间的性能,即O(1)。TreeSet的基本操作的性能取决于红黑树的高度,通常情况下,添加、删除、包含等操作的时间复杂度是O(log n),其中n是集合中的元素数量。
- 使用场景:
- 如果不需要元素的排序,只需简单地存储和检索元素,并且不关心元素的顺序,可以使用
HashSet。 - 如果需要对元素进行排序,或者需要维护插入顺序,可以使用
TreeSet。它适用于需要按照特定顺序遍历元素的场景。
- 如果不需要元素的排序,只需简单地存储和检索元素,并且不关心元素的顺序,可以使用
综上所述,选择HashSet还是TreeSet取决于您的需求,如果需要元素的排序或者需要维护插入顺序,可以选择TreeSet;如果只需要简单的存储和检索元素,并且不关心元素的顺序,可以选择HashSet。
List的用法
List是Java集合框架中的一个接口,它表示有序的集合,可以包含重复元素。List接口继承自Collection接口,它提供了按照索引访问元素的功能。
List接口的主要方法
- int size():返回列表中的元素数量。
- boolean isEmpty():如果列表中没有元素,则返回true;否则返回false。
- boolean contains(Object o):如果列表包含指定的元素,则返回true。
- boolean add(E e):将指定的元素添加到列表的末尾。如果列表因为添加元素而发生改变,则返回true。
- boolean remove(Object o):从列表中移除指定的元素。如果列表包含了该元素,则返回true。
- E get(int index):返回列表中指定位置的元素。
- E set(int index, E element):用指定的元素替换列表中指定位置的元素,并返回原始元素。
- void add(int index, E element):在列表的指定位置插入指定的元素。
- E remove(int index):移除列表中指定位置的元素,并返回该元素。
- int indexOf(Object o):返回列表中第一次出现指定元素的索引,如果列表不包含该元素,则返回-1。
- int lastIndexOf(Object o):返回列表中最后一次出现指定元素的索引,如果列表不包含该元素,则返回-1。
- void clear():移除列表中的所有元素。
- List subList(int fromIndex, int toIndex):返回列表中指定范围的视图。
List接口的主要实现类
- ArrayList:基于动态数组实现的
List,它允许快速随机访问元素。当需要频繁地访问列表中的元素,而不涉及插入和删除操作时,通常使用ArrayList。由于它是基于数组实现的,因此在随机访问时具有较好的性能。但是,插入和删除操作可能会导致元素的移动,因此在大量插入和删除操作时性能可能会受到影响。 - LinkedList:基于双向链表实现的
List,它允许高效地在列表的任意位置进行插入和删除操作。当需要频繁地执行插入和删除操作时,通常使用LinkedList。由于它是基于链表实现的,因此在插入和删除操作时具有较好的性能。但是,随机访问时的性能可能不如ArrayList,因为需要遍历链表来找到指定位置的元素。
ArrayList()常用方法
ArrayList是Java中List接口的一个主要实现类,它基于动态数组实现,提供了一系列常用的方法来操作列表中的元素。以下是ArrayList常用的方法:
- add(E e):将指定的元素追加到列表的末尾。
- add(int index, E element):将指定的元素插入到列表的指定位置。
- remove(int index):移除列表中指定位置的元素。
- remove(Object o):移除列表中第一个出现的指定元素。
- get(int index):返回列表中指定位置的元素。
- set(int index, E element):将列表中指定位置的元素替换为指定的元素。
- size():返回列表中的元素数量。
- isEmpty():如果列表中没有元素,则返回true;否则返回false。
- clear():移除列表中的所有元素。
- contains(Object o):如果列表包含指定的元素,则返回true。
- indexOf(Object o):返回列表中第一次出现指定元素的索引,如果列表不包含该元素,则返回-1。
- lastIndexOf(Object o):返回列表中最后一次出现指定元素的索引,如果列表不包含该元素,则返回-1。
- toArray():返回包含列表中所有元素的数组。
- addAll(Collection<? extends E> c):将指定集合中的所有元素追加到列表的末尾。
- addAll(int index, Collection<? extends E> c):将指定集合中的所有元素插入到列表的指定位置。
这些方法提供了对ArrayList中元素进行添加、移除、获取、替换、查询等操作的支持,是使用ArrayList时常用的方法。
LinkedList()常用方法
LinkedList是Java中List接口的另一个主要实现类,它基于双向链表实现。以下是LinkedList常用的方法:
- add(E e):将指定的元素追加到列表的末尾。
- add(int index, E element):将指定的元素插入到列表的指定位置。
- remove(int index):移除列表中指定位置的元素。
- remove(Object o):移除列表中第一个出现的指定元素。
- get(int index):返回列表中指定位置的元素。
- set(int index, E element):将列表中指定位置的元素替换为指定的元素。
- size():返回列表中的元素数量。
- isEmpty():如果列表中没有元素,则返回true;否则返回false。
- clear():移除列表中的所有元素。
- contains(Object o):如果列表包含指定的元素,则返回true。
- indexOf(Object o):返回列表中第一次出现指定元素的索引,如果列表不包含该元素,则返回-1。
- lastIndexOf(Object o):返回列表中最后一次出现指定元素的索引,如果列表不包含该元素,则返回-1。
- toArray():返回包含列表中所有元素的数组。
- addAll(Collection<? extends E> c):将指定集合中的所有元素追加到列表的末尾。
- addAll(int index, Collection<? extends E> c):将指定集合中的所有元素插入到列表的指定位置。
- addFirst(E e):将指定元素插入到列表的开头。
- addLast(E e):将指定元素追加到列表的末尾。
- removeFirst():移除并返回列表的第一个元素。
- removeLast():移除并返回列表的最后一个元素。
- getFirst():返回列表的第一个元素。
- getLast():返回列表的最后一个元素。
- peek():检查列表的第一个元素,但不移除它。
- peekFirst():检查列表的第一个元素,但不移除它。
- peekLast():检查列表的最后一个元素,但不移除它。
- poll():移除并返回列表的第一个元素,如果列表为空则返回null。
- pollFirst():移除并返回列表的第一个元素,如果列表为空则返回null。
- pollLast():移除并返回列表的最后一个元素,如果列表为空则返回null。
这些方法提供了对LinkedList中元素进行添加、移除、获取、替换、查询等操作的支持,是使用LinkedList时常用的方法。另外,LinkedList还提供了一些与双向链表特性相关的方法,例如在链表的开头或末尾进行添加和移除操作。
ArrayList和LinkedList区别
ArrayList基于数组实现,适合随机访问;LinkedList基于链表实现,适合频繁插入和删除。
- 底层数据结构:
ArrayList基于动态数组实现,内部使用数组来存储元素。因此,它支持随机访问,可以通过索引快速访问元素。LinkedList基于双向链表实现,内部使用链表来存储元素。因此,它不支持随机访问,访问元素时需要从头或尾部开始遍历链表。
- 插入和删除操作的性能:
- 在
ArrayList中,插入和删除元素的性能取决于元素移动的数量。如果插入或删除元素位置之后的元素需要移动,则性能较低。平均情况下,插入和删除的时间复杂度是O(n)。 - 在
LinkedList中,插入和删除元素的性能不受影响,因为只需要修改相邻节点的指针即可。在链表的头部和尾部进行插入和删除操作的性能是常数时间的,即O(1);在中间位置进行插入和删除操作的性能取决于元素的位置,平均情况下为O(n/2),即O(n)。
- 在
- 随机访问的性能:
- 在
ArrayList中,由于支持随机访问,可以通过索引快速访问元素,其时间复杂度为O(1)。 - 在
LinkedList中,由于不支持随机访问,访问元素时需要从头或尾部开始遍历链表,其时间复杂度取决于元素的位置,平均情况下为O(n/2),即O(n)。
- 在
- 空间占用:
ArrayList的空间利用率较高,因为它只在需要时扩展内部数组的大小,并且不会浪费额外的空间。LinkedList的空间占用较高,因为除了存储元素本身外,还需要额外的空间来存储节点之间的指针。
- 适用场景:
- 如果需要频繁地进行随机访问,可以选择
ArrayList。 - 如果需要频繁地进行插入和删除操作,尤其是在集合的头部和尾部进行操作,可以选择
LinkedList。
- 如果需要频繁地进行随机访问,可以选择
综上所述,选择ArrayList还是LinkedList取决于您的需求,如果需要频繁地进行随机访问,可以选择ArrayList;如果需要频繁地进行插入和删除操作,尤其是在集合的头部和尾部进行操作,可以选择LinkedList。
Map的用法
Map是一种集合类型,它表示一组键值对的映射关系。Map接口中的键和值都是对象,键是唯一的,但值可以重复。 Map没有继承于Collection接口从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。
Map接口的主要方法
- put(key, value):添加键值对到Map中。
- get(key):获取指定键对应的值。
- remove(key):移除指定键对应的键值对。
- containsKey(key):判断Map中是否包含指定的键。
- containsValue(value):判断Map中是否包含指定的值。
- keySet():获取Map中所有键的集合。
- values():获取Map中所有值的集合。
- entrySet():获取Map中所有键值对的集合。
- 遍历键值对:使用增强for循环或迭代器遍历Map中的键值对。
Map接口的主要实现类
- HashMap:基于哈希表实现的Map,不保证元素的顺序,不允许有重复键。
- TreeMap:基于红黑树实现的有序Map,元素按照键的自然顺序或者指定的比较器进行排序。
- LinkedHashMap:基于哈希表和链表实现的Map,维护了元素的插入顺序或者访问顺序。
- Hashtable:早期的哈希表实现的Map,线程安全但性能相对较低,已被
ConcurrentHashMap取代。 - ConcurrentHashMap:并发环境下线程安全的哈希表实现的Map,提供了高并发性能
HashMap()常用方法
- put(K key, V value):将指定的键值对添加到HashMap中。
- get(Object key):返回指定键所映射的值,如果该键不存在,则返回null。
- remove(Object key):从HashMap中移除指定键及其对应的值。
- containsKey(Object key):判断HashMap中是否包含指定的键。
- containsValue(Object value):判断HashMap中是否包含指定的值。
- size():返回HashMap中键值对的数量。
- isEmpty():判断HashMap是否为空,如果HashMap中没有键值对,则返回true。
- clear():移除HashMap中的所有键值对。
- keySet():返回一个包含HashMap中所有键的Set集合。
- values():返回一个包含HashMap中所有值的Collection集合。
- entrySet():返回一个包含HashMap中所有键值对的Set集合,每个元素都是Map.Entry对象。
这些方法能够实现对HashMap中键值对的添加、获取、移除、判断、遍历等操作。
TreeMap()常用方法
- put(K key, V value):将指定的键值对添加到TreeMap中。
- get(Object key):返回指定键所映射的值,如果该键不存在,则返回null。
- remove(Object key):从TreeMap中移除指定键及其对应的值。
- containsKey(Object key):判断TreeMap中是否包含指定的键。
- containsValue(Object value):判断TreeMap中是否包含指定的值。
- size():返回TreeMap中键值对的数量。
- isEmpty():判断TreeMap是否为空,如果TreeMap中没有键值对,则返回true。
- clear():移除TreeMap中的所有键值对。
- firstKey():返回TreeMap中的第一个(最小)键。
- lastKey():返回TreeMap中的最后一个(最大)键。
- lowerKey(K key):返回小于指定键的最大键,如果不存在,则返回null。
- higherKey(K key):返回大于指定键的最小键,如果不存在,则返回null。
- floorKey(K key):返回小于等于指定键的最大键,如果不存在,则返回null。
- ceilingKey(K key):返回大于等于指定键的最小键,如果不存在,则返回null。
- keySet():返回一个包含TreeMap中所有键的Set集合。
- values():返回一个包含TreeMap中所有值的Collection集合。
- entrySet():返回一个包含TreeMap中所有键值对的Set集合,每个元素都是Map.Entry对象。
这些方法能够实现对TreeMap中键值对的添加、获取、移除、判断、遍历等操作,以及获取最小键、最大键、小于指定键的最大键、大于指定键的最小键等操作。
HashMap和TreeMap区别
- 底层数据结构:
- HashMap:基于哈希表实现,使用数组和链表/红黑树组合实现,不保证元素的顺序。
- TreeMap:基于红黑树实现,保持元素的排序顺序。
- 元素顺序:
- HashMap:不保证元素的顺序,因为其内部结构是无序的。
- TreeMap:元素按照键的自然顺序或者指定的比较器进行排序,保持有序性。
- 性能:
- HashMap:基本操作的时间复杂度为O(1),但在极端情况下可能达到O(n)。
- TreeMap:基本操作的时间复杂度为O(log n),具有更稳定的性能。
- 适用场景:
- HashMap:适用于需要快速添加、查找、删除键值对,并且不关心元素顺序的场景。
- TreeMap:适用于需要对元素进行排序,并且需要有序遍历元素的场景。
综上所述,选择HashMap还是TreeMap取决于需求。如果不需要元素的排序,并且需要快速的增删改查操作,可以选择HashMap;如果需要元素有序,并且需要有序遍历元素,可以选择TreeMap。
相关文章:
Java中的Set、List、Map的区别及主要实现类方法
Java中的Set、List、Map的区别 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据。 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引…...
gitignore:常用说明
示例: Java HELP.md target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/** !**/src/test/**### IntelliJ IDEA.idea *.iws *.iml *.ipr### NetBeans/nbproject/private/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ build/ logs/### VS Code.vscode/ 说明&#…...
HarmonyOS NEXT应用开发—在Native侧实现进度通知功能
介绍 本示例通过模拟下载场景介绍如何将Native的进度信息实时同步到ArkTS侧。 效果图预览 使用说明 点击“Start Download“按钮后,Native侧启动子线程模拟下载任务Native侧启动子线程模拟下载,并通过Arkts的回调函数将进度信息实时传递到Arkts侧 实…...
水利自动化控制系统平台介绍
水利自动化控制系统平台介绍 在当今社会,水资源的管理和保护日益成为全球关注的重要议题。随着科技的进步和信息化的发展,水利监测系统作为一种集成了现代信息技术、自动化控制技术以及环境监测技术的综合性平台,正在逐步改变传统的水利管理模…...
flask后端+网页前端:基于 socket.io 的双向通信和服务器部署
我想实现的效果是,我的服务器提供两个路由网址,网页A用于拍照、然后录音,把照片和录音传给服务器,服务器发射信号,通知另一个路由的网页B更新,把刚刚传来的照片和录音显示在网页上。 然后网页B用户根据这个…...
【Docker】解决 docker build 提示 `Wrong architecture ‘amd64‘`
解决 docker build 提示 Wrong architecture amd64 使用 securify2 的 docker 版本进行 sc 安全扫描 执行语句 RUN wget https://github.com/souffle-lang/souffle/releases/download/1.6.2/souffle_1.6.2-1_amd64.deb -O /tmp/souffle.deb &&\ gdebi --n /tmp/souff…...
机器学习_XGBoost模型_用C++推理示例Demo
1. 需求 将 python 训练好的 xgboost 模型, 使用C 进行加载并进行推理(预测) 2. 代码实现 #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <string> #include <xgboost/c_api.h>const char *m…...
C语言 | Leetcode C语言题解之第21题合并两个有序链表
题目: 题解: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {/…...
2024考研调剂须知
----------------------------------------------------------------------------------------------------- 考研复试科研背景提升班 教你快速深入了解掌握考研复试面试中的常见问题以及注意事项,系统的教你如何在短期内快速提升自己的专业知识水平和编程以及英语…...
PCIE协议版--M.2接口规范V1.0中文版1——电气规格篇
3.电气规范 3.1 Connectivity Socket 1 系统接口信号 表15适用于Socket 1-SD和Socket 1-DP输出版本。 3.1.1.补充NFC信号 当一个SIM设备被用作安全元素时,NFC解决方案可以与表16中列出的附加信号相结合。 3.1.2.电源和地 PCI Express M.2 Socket 1使用一个3.3 V…...
【JVM】JVM堆占用情况分析(频繁创建的对象、内存泄露等问题)、jmap+jhat、jvisualvm工具使用
文章目录 一. 相关命令1. 查看进程堆内存整体使用情况:OOM的可能2. 统计类的对象数量以及内存占用:定位内存泄漏 二. 分析内存占用1. 使用 jhat 排查对象堆占用情况1.1. 排查步骤1.2. 具体分析例子a. 分析频繁创建对象导致的OOM 1.3. OQL查看某一个对象的…...
【蓝桥杯每日一题】4.11 更小的数(不用区间DP)
题目来源: 蓝桥杯 2023 省 A]更小的数 - 洛谷 这题只需要用到双指针就OK~ 思路1: 翻转数组的子数组,然后进行比较大小将翻转后的数组存储在字符串 k k k中,然后将字符串 k k k与字符串 a a a进行逐一元素比较(因为…...
【线段树】2276. 统计区间中的整数数目
算法可以发掘本质,如: 一,若干师傅和徒弟互有好感,有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二,有无限多1X2和2X1的骨牌,某个棋盘若干格子坏了,如何在没有坏…...
ChatGPT 写作利器:探索ChatGPT在论文写作中的应用
ChatGPT无限次数:点击直达 ChatGPT 写作利器:探索ChatGPT在论文写作中的应用 引言 ChatGPT是一种强大的自然语言处理工具,能够为我们提供高效、准确的文本生成功能。在论文写作领域,ChatGPT的应用也逐渐受到关注。本文将探讨ChatGPT在论文写…...
从 SQLite 3.4.2 迁移到 3.5.0(二十)
返回:SQLite—系列文章目录 上一篇:SQLite---调试提示(十九) 下一篇:SQLite—系列文章目录 SQLite 版本 3.5.0 (2007-09-04) 引入了一个新的操作系统接口层, 与所有先前版本的 SQLi…...
集群开发学习(一)(安装GO和MySQL,K8S基础概念)
完成gin小任务 参考文档: https://www.kancloud.cn/jiajunxi/ginweb100/1801414 https://github.com/hanjialeOK/going 最终代码地址:https://github.com/qinliangql/gin_mini_test.git 学习 1.安装go wget https://dl.google.com/go/go1.20.2.linu…...
[Kubernetes[K8S]集群:Slaver从节点初始化和Join]:添加到主节点集群内
文章目录 操作流程:上篇主节初始化地址:前置:Docker和K8S安装版本匹配查看0.1:安装指定docker版本 **[1 — 8] ** [ 这些步骤主从节点前置操作一样的 ]一:主节点操作 查看主机域名->编辑域名->域名配置二&#x…...
redis复习笔记08(小滴课堂)
案例实战需求之大数据下的用户画像标签去重 我们就简单的做到了去重了。 案例实战社交应用里面之关注、粉丝、共同好友案例 这就是我们set的一个应用。 案例实战之SortedSet用户积分实时榜单最佳实践 准备积分类对象: 我们加上构造方法和判断相等的equals和hascod…...
在线课程平台LearnDash评测 – 最佳 WordPress LMS插件
在我的LearnDash评测中,我探索了流行的 WordPress LMS 插件,该插件以其用户友好的拖放课程构建器而闻名。我深入研究了各种功能,包括课程创建、测验、作业、滴灌内容、焦点模式、报告、分析和管理工具。 我的评测还讨论了套餐和定价选项&…...
OpenDDS-3.27构建与用法
一、OpenDDS-3.27构建 ./configure To enable Java bindings, use ./configure --java make 二、运行Messenger Example: source setenv.sh For the C example:cd DevGuideExamples/DCPS/Messenger For the Java example:cd java/tests/mes…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
