Java集合类的重要性

当谈到Java编程语言的强大功能时,集合类是一个不可忽视的关键组成部分。Java集合类为开发人员提供了一组丰富的数据结构和算法,用于有效地组织和操作数据。在本篇博客中,我们将深入探讨Java集合类的重要性、常见类型以及如何使用它们来提高代码的效率。

Java集合类的重要性

在软件开发中,经常需要处理大量的数据。Java集合类提供了一种方便的方式来组织和管理这些数据,使得开发人员能够更轻松地进行数据操作和处理。集合类的使用不仅提高了代码的可读性,还加速了开发过程。

1. List接口实现类

1.1 ArrayList
  • 动态数组实现,支持快速随机访问。
List<String> arrayList = new ArrayList<>();
1.2 LinkedList
  • 双向链表实现,适用于频繁插入和删除操作。
List<String> linkedList = new LinkedList<>();
1.3 Vector
  • 动态数组实现,线程安全版本的ArrayList。
List<String> vector = new Vector<>();

2. Set接口实现类

2.1 HashSet
  • 基于哈希表实现,无序,不允许重复元素。
Set<String> hashSet = new HashSet<>();
2.2 LinkedHashSet
  • 具有可预测迭代顺序的HashSet。
Set<String> linkedHashSet = new LinkedHashSet<>();
2.3 TreeSet
  • 基于红黑树实现,有序,不允许重复元素。
Set<String> treeSet = new TreeSet<>();

3. Map接口实现类

3.1 HashMap
  • 基于哈希表实现,键值对无序,键和值均可为null。
Map<String, Integer> hashMap = new HashMap<>();
3.2 LinkedHashMap
  • 具有可预测迭代顺序的HashMap。
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
3.3 TreeMap
  • 基于红黑树实现,键有序,键和值均不可为null。
Map<String, Integer> treeMap = new TreeMap<>();

4. Queue和Deque接口实现类

4.1 PriorityQueue
  • 基于优先级堆实现的队列。
Queue<Integer> priorityQueue = new PriorityQueue<>();
4.2 ArrayDeque
  • 双端队列的数组实现。
Deque<String> arrayDeque = new ArrayDeque<>();

5. 其他集合类

5.1 HashMap的同步版本
  • 通过Collections.synchronizedMap方法实现同步的HashMap。
Map<String, Integer> synchronizedHashMap = Collections.synchronizedMap(new HashMap<>());
5.2 ArrayList的同步版本
  • 通过Collections.synchronizedList方法实现同步的ArrayList。
List<String> synchronizedArrayList = Collections.synchronizedList(new ArrayList<>());

以上是Java中一些常见的集合类,它们提供了丰富的功能和灵活性,可以根据具体需求选择合适的集合类来处理数据。

6. Stack类

6.1 Stack
  • 基于栈的数据结构,遵循先进后出(FILO)的原则。
Stack<String> stack = new Stack<>();

7. Queue接口实现类

7.1 LinkedList(作为队列使用)
  • 双向链表实现,可用作队列。
Queue<String> queue = new LinkedList<>();
7.2 ArrayBlockingQueue
  • 基于数组实现的有界阻塞队列。
BlockingQueue<String> arrayBlockingQueue = new ArrayBlockingQueue<>(10);

8. Deque接口实现类

8.1 ArrayDeque(作为栈使用)
  • 双端队列的数组实现,可用作栈。
Deque<String> stackAsDeque = new ArrayDeque<>();

9. Collections类

9.1 Collections
  • 提供了一系列静态方法,用于对集合进行操作,例如排序、反转等。
List<String> myList = new ArrayList<>();
Collections.addAll(myList, "元素1", "元素2", "元素3");
Collections.sort(myList);
9.2 Arrays
  • 提供了用于操作数组的静态方法。
String[] array = {"元素1", "元素2", "元素3"};
Arrays.sort(array);

10. Concurrent包中的集合类

10.1 ConcurrentHashMap
  • 线程安全的HashMap实现,用于高并发场景。
Map<String, Integer> concurrentHashMap = new ConcurrentHashMap<>();
10.2 CopyOnWriteArrayList
  • 线程安全的ArrayList实现,适用于读多写少的场景。
List<String> copyOnWriteArrayList = new CopyOnWriteArrayList<>();

11. BitSet类

11.1 BitSet
  • 用于位操作的类,通常用于标记某些条件或状态。
BitSet bitSet = new BitSet();
bitSet.set(2);

12. WeakHashMap类

12.1 WeakHashMap
  • 一种特殊的HashMap,对于键而言是弱引用,有助于避免内存泄漏。
Map<String, Integer> weakHashMap = new WeakHashMap<>();

13. EnumSet和EnumMap

13.1 EnumSet
  • 用于枚举类型的集合。
EnumSet<Days> days = EnumSet.of(Days.MONDAY, Days.TUESDAY);
13.2 EnumMap
  • 用于枚举类型作为键的映射。
EnumMap<Days, String> enumMap = new EnumMap<>(Days.class);
enumMap.put(Days.MONDAY, "星期一");

14. LinkedTransferQueue

14.1 LinkedTransferQueue
  • 一种高性能的无界队列,可用于生产者-消费者模型。
TransferQueue<String> transferQueue = new LinkedTransferQueue<>();

15. PriorityBlockingQueue

15.1 PriorityBlockingQueue
  • 无界阻塞队列,元素按照优先级进行排序。
BlockingQueue<String> priorityBlockingQueue = new PriorityBlockingQueue<>();

16. NavigableSet和NavigableMap

16.1 TreeSet的子类 - NavigableSet
  • 通过导航方法提供对集合元素的导航和检索。
NavigableSet<String> navigableSet = new TreeSet<>();
16.2 TreeMap的子类 - NavigableMap
  • 提供了一些额外的导航方法,使得可以对映射的键进行范围检索。
NavigableMap<String, Integer> navigableMap = new TreeMap<>();

17. Spliterator接口

17.1 Spliterator
  • 用于支持并行迭代的接口,可用于遍历数据源并拆分任务。
List<String> myList = Arrays.asList("元素1", "元素2", "元素3");
Spliterator<String> spliterator = myList.spliterator();

18. Java 8引入的新特性 - Stream

18.1 Stream
  • 一种新的抽象,用于对集合进行函数式风格的操作。
List<String> myList = Arrays.asList("元素1", "元素2", "元素3");
Stream<String> myStream = myList.stream();
18.2 Collectors
  • 提供了一系列用于将流元素归约和汇总的静态工厂方法。
List<String> myList = Arrays.asList("元素1", "元素2", "元素3");
List<String> collectedList = myList.stream().collect(Collectors.toList());

19. Immutable集合

19.1 Immutable集合
  • Java 9 引入了一系列不可变集合,用于创建不可变、线程安全的集合。
List<String> immutableList = List.of("元素1", "元素2", "元素3");

20. ConcurrentSkipListSet和ConcurrentSkipListMap

20.1 ConcurrentSkipListSet
  • 一个支持并发的有序集合。
Set<String> concurrentSkipListSet = new ConcurrentSkipListSet<>();
20.2 ConcurrentSkipListMap
  • 一个支持并发的有序映射。
Map<String, Integer> concurrentSkipListMap = new ConcurrentSkipListMap<>();

通过深入了解这些集合类,开发者可以更好地选择适当的数据结构,以便在不同的场景中达到最佳性能和可维护性。在实际项目中,结合具体需求和特性,选择合适的集合类是提高代码质量和性能的关键之一。

21. BitSet类的位操作

21.1 BitSet类的位操作
  • BitSet类不仅仅用于标记条件或状态,还可以进行位操作,例如AND、OR和XOR。
BitSet bitSet1 = new BitSet();
BitSet bitSet2 = new BitSet();
bitSet1.set(1);
bitSet2.set(2);
bitSet1.and(bitSet2);

22. IdentityHashMap

22.1 IdentityHashMap
  • 一种特殊的HashMap,使用对象的引用相等性代替普通的对象相等性。
Map<String, Integer> identityHashMap = new IdentityHashMap<>();

23. Java 8引入的新特性 - CompletableFuture

23.1 CompletableFuture
  • 一种用于异步编程的类,可以轻松地组合多个异步操作。
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello").thenApply(s -> s + " World").thenApply(String::toUpperCase);

24. Java 9引入的新特性 - 集合工厂方法

24.1 集合工厂方法
  • Java 9 引入了一系列便捷的工厂方法,用于创建不可变的、初始化的集合。
List<String> immutableList = List.of("元素1", "元素2", "元素3");
Set<String> immutableSet = Set.of("元素1", "元素2", "元素3");

25. 性能优化 - 避免不必要的装箱和拆箱

25.1 避免不必要的装箱和拆箱
  • 尽量使用基本数据类型而不是对应的包装类型,以提高性能。
List<Integer> integerList = new ArrayList<>();
// 不推荐
integerList.add(new Integer(42));
// 推荐
integerList.add(42);

26. 性能优化 - 使用正确的数据结构

26.1 使用正确的数据结构
  • 根据操作的特性选择适当的数据结构,例如对于频繁插入和删除操作,选择LinkedList而不是ArrayList。
List<String> linkedList = new LinkedList<>();

27. ConcurrentHashMap的分段锁

27.1 ConcurrentHashMap的分段锁
  • ConcurrentHashMap通过将数据分为多个段(Segment),每个段拥有独立的锁,实现更高效的并发操作。
Map<String, Integer> concurrentHashMap = new ConcurrentHashMap<>();

28. Collections.unmodifiableXXX方法

28.1 Collections.unmodifiableXXX方法
  • 通过这些方法创建不可修改的集合,防止在运行时修改集合。
List<String> originalList = new ArrayList<>();
List<String> unmodifiableList = Collections.unmodifiableList(originalList);

通过深入学习这些特殊的集合类和用法,以及关注性能优化和并发问题,可以使得在实际的Java开发中更灵活、高效地运用集合框架。选择适当的集合类和优化方法是构建稳定、可维护、高性能的应用程序的关键一环。

29. Lambda表达式和函数式接口

29.1 Lambda表达式和函数式接口
  • 使用Lambda表达式和函数式接口可以使集合的操作更加简洁和函数式。
List<String> myList = Arrays.asList("元素1", "元素2", "元素3");
myList.forEach(element -> System.out.println(element));

30. Java 8引入的新特性 - Optional

30.1 Optional
  • 用于防止空指针异常的容器对象,推荐在集合中使用。
List<String> myList = Arrays.asList("元素1", "元素2", "元素3");
Optional<String> firstElement = myList.stream().findFirst();

31. 自定义对象在集合中的使用

31.1 自定义对象在集合中的使用
  • 当存储自定义对象时,确保对象正确实现equalshashCode方法,以便在集合中正确比较和查找对象。
class Person {// 省略其他代码@Overridepublic boolean equals(Object obj) {// 实现equals方法}@Overridepublic int hashCode() {// 实现hashCode方法}
}

32. 集合的序列化和反序列化

32.1 集合的序列化和反序列化
  • 当需要将集合对象存储到文件或通过网络传输时,要考虑集合的序列化和反序列化。
List<String> myList = Arrays.asList("元素1", "元素2", "元素3");// 序列化
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("file.ser"))) {out.writeObject(myList);
}// 反序列化
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("file.ser"))) {List<String> deserializedList = (List<String>) in.readObject();
}

33. Guava库中的集合工具

33.1 Guava库中的集合工具
  • Google的Guava库提供了许多强大的集合工具,例如不可修改集合、集合过滤等。
List<String> myList = Arrays.asList("元素1", "元素2", "元素3");
ImmutableList<String> immutableList = ImmutableList.copyOf(myList);

34. 集合的性能调优

34.1 集合的性能调优
  • 在处理大数据集时,要特别关注集合的性能。了解集合操作的时间复杂度,选择合适的集合类和算法,以及合理利用缓存机制,都是提高性能的关键。
Map<String, Integer> myMap = new HashMap<>(10000);
// 执行一些操作

35. Java 10引入的局部变量类型推断

35.1 局部变量类型推断
  • Java 10 引入了局部变量类型推断,可以更加简洁地声明变量。
var myList = Arrays.asList("元素1", "元素2", "元素3");

36. 集合的数据分析与流处理

36.1 集合的数据分析与流处理
  • 使用流处理进行数据分析,例如计算总和、平均值等。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
double average = numbers.stream().mapToDouble(Integer::doubleValue).average().orElse(0);

通过理解这些高级主题和实践经验,开发人员能够更好地运用Java集合框架,写出高效、健壮、可维护的代码。深入掌握这些概念将使你在处理各种数据场景时更加游刃有余。

当涉及到Java集合框架时,还有一些关键的概念和技术,涉及到并发、性能优化、设计模式等方面,这些知识对于构建高效、可伸缩的应用程序至关重要。

37. 并发集合和同步

37.1 并发集合和同步
  • Java提供了一系列的并发集合,例如ConcurrentHashMapCopyOnWriteArrayList,用于在多线程环境中安全地操作集合。
ConcurrentHashMap<String, Integer> concurrentHashMap = new ConcurrentHashMap<>();

38. 集合的批量操作

38.1 集合的批量操作
  • 使用Java 8引入的Stream API,可以轻松进行集合的批量操作,例如过滤、映射、汇总等。
List<String> myList = Arrays.asList("元素1", "元素2", "元素3");
long count = myList.stream().filter(e -> e.startsWith("元素")).count();

39. 集合的比较和排序

39.1 集合的比较和排序
  • 实现Comparable接口或使用Comparator进行集合元素的自定义排序。
List<Person> personList = Arrays.asList(new Person("Alice", 25), new Person("Bob", 30));
Collections.sort(personList);

40. Java 8引入的新特性 - CompletableFuture

40.1 CompletableFuture
  • CompletableFuture不仅可以用于简化异步编程,还可以用于并发地处理多个异步任务,提高系统性能。
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello").thenApply(s -> s + " World").thenApply(String::toUpperCase);

41. Fail-Fast和Fail-Safe迭代器

41.1 Fail-Fast和Fail-Safe迭代器
  • Java的集合迭代器有两种实现,Fail-Fast迭代器在迭代过程中检测集合是否被修改,而Fail-Safe迭代器则允许在迭代时修改集合。
List<String> myList = new ArrayList<>();
Iterator<String> failFastIterator = myList.iterator();

42. 设计模式在集合中的应用

42.1 设计模式在集合中的应用
  • 一些设计模式,如观察者模式、策略模式,可以用于优雅地解决集合中的问题。
List<String> myList = Arrays.asList("元素1", "元素2", "元素3");
Observer observer = new MyObserver();
myList.forEach(observer::notifyElement);

43. 使用集合工具进行搜索和匹配

43.1 使用集合工具进行搜索和匹配
  • 使用StreamPredicate等集合工具进行高效的搜索和匹配。
List<String> myList = Arrays.asList("元素1", "元素2", "元素3");
boolean anyStartsWithE = myList.stream().anyMatch(s -> s.startsWith("E"));

44. Java 9引入的响应式流 - Flow API

44.1 响应式流 - Flow API
  • Java 9 引入了响应式流,提供了一种异步的、非阻塞的处理数据流的机制。
Publisher<String> publisher = new MyPublisher();
Subscriber<String> subscriber = new MySubscriber();
publisher.subscribe(subscriber);

45. Java 10引入的局部变量类型推断

45.1 局部变量类型推断
  • Java 10 引入了局部变量类型推断,可以简化代码,但仍保持了类型安全。
myList = Arrays.asList("元素1", "元素2", "元素3");

深入了解这些概念和技术将有助于开发人员更全面地应用Java集合框架,构建出更加健壮、高性能的应用程序。在项目中,考虑到具体的业务需求和性能要求,选择合适的集合类和技术将成为项目成功的重要因素。

46. LRU缓存

46.1 LRU缓存
  • Least Recently Used (LRU) 缓存是一种常见的缓存策略,通过移除最近最少使用的元素来维持固定大小的缓存。
int cacheSize = 100;
Map<String, Integer> lruCache = new LinkedHashMap<>(cacheSize, 0.75f, true) {@Overrideprotected boolean removeEldestEntry(Map.Entry<String, Integer> eldest) {return size() > cacheSize;}
};

47. Bloom Filter

47.1 Bloom Filter
  • 布隆过滤器是一种空间效率高的概率型数据结构,用于判断一个元素是否属于一个集合。
BloomFilter<String> bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charset.defaultCharset()), 1000, 0.01);
bloomFilter.put("元素1");

48. 位图

48.1 位图
  • 位图是一种用于表示集合的紧凑数据结构,适用于元素的取值范围很小时。
BitSet bitSet = new BitSet();
bitSet.set(1);

49. 集合的分区和分组

49.1 集合的分区和分组
  • 使用Collectors.partitioningByCollectors.groupingBy进行集合的分区和分组。
List<Person> personList = Arrays.asList(new Person("Alice", 25), new Person("Bob", 30), new Person("Charlie", 25));// 分区
Map<Boolean, List<Person>> partitionedMap = personList.stream().collect(Collectors.partitioningBy(person -> person.getAge() > 28));// 分组
Map<Integer, List<Person>> groupedMap = personList.stream().collect(Collectors.groupingBy(Person::getAge));

50. 集合的延迟加载和流水线

50.1 集合的延迟加载和流水线
  • 集合的延迟加载和流水线操作可以通过Stream API来实现,只有在需要结果时才进行实际的计算。
List<String> myList = Arrays.asList("元素1", "元素2", "元素3");// 延迟加载
Stream<String> stream = myList.stream().filter(e -> e.startsWith("元素"));// 流水线操作
long count = myList.stream().filter(e -> e.startsWith("元素")).count();

51. Java 11引入的新特性 - 集合的API增强

51.1 集合的API增强
  • Java 11引入了一些集合API的增强,例如List.copyOfSet.copyOf等。
List<String> originalList = Arrays.asList("元素1", "元素2", "元素3");
List<String> immutableCopy = List.copyOf(originalList);

52. 自定义集合类

52.1 自定义集合类
  • 在某些情况下,可能需要根据特定需求创建自定义的集合类,以提供更灵活和高效的数据结构。
public class CustomList<T> {// 自定义实现
}

53. 集合的性能测试和优化

53.1 集合的性能测试和优化
  • 使用工具类如JMH(Java Microbenchmarking Harness)进行集合性能测试,并根据测试结果进行优化。
@Benchmark
public void testArrayListAdd() {List<String> arrayList = new ArrayList<>();for (int i = 0; i < SIZE; i++) {arrayList.add("元素" + i);}
}

通过深入了解这些高级的数据结构、算法以及集合的实用技巧,我们可以更加高效地处理不同场景下的数据需求,同时也能更好地理解Java集合框架的底层实现和性能特性。

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

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

相关文章

Mac 安装 Django 并连接 MySQL

一、下载安装运行Django看官方教程就好了&#xff0c;网址&#xff1a;Django 安装_w3cschool 二、连接MySQL&#xff08;我用的是pymysql和mysqlclient&#xff09;&#xff1a; 1、创建好项目后找到这个文件 2、修改当中的连接信息&#xff0c;将这些信息改成你自己的就好了…

2023-12-01 AIGC-自动生成ppt的AI工具

摘要: 2023-12-01 AIGC-自动生成ppt-记录 自动生成ppt: BoardMix boardmix 一键生成ppt boardmix是一款基于云的ai设计软件&#xff0c;允许创建用于各种目的的自定义演示文稿、ai绘画&#xff0c;ai生成思维导图等。以下是它的一些功能&#xff1a; 可定制的模板 - 它有一个…

Redis基本命令

文章目录 第1关&#xff1a;字符串、列表与集合第2关&#xff1a;哈希与有序集合第3关&#xff1a;Redis基本事务与其他命令 第1关&#xff1a;字符串、列表与集合 编程要求 根据提示&#xff0c;在右侧Begin-End区域补充代码&#xff0c;完成任务分配的后端处理逻辑&#xff…

Python-docx 深入word源码 自定义页码页脚以动态显示总页数和当前页数

代码和效果图 先上能够正常显示页码页脚的Python代码和效果图&#xff0c;之后再解释原理和思路 from docx import Document from docx.shared import Pt from docx.oxml import OxmlElement from docx.enum.text import WD_PARAGRAPH_ALIGNMENT from docx.oxml.ns import qn…

CSIT883系统分析与项目管理——Lecture5重点概念

文章目录 一、前言二、重点概念三、题目分析总结一、前言 这次课程给大家介绍识别用户故事(user stories)和用例(use cases)与项目进度管理相关的知识与题目,这节课也可以说抛砖引玉吧,后面很多重点内容都需要理解这个概念才可以展开学习。同时这节课还有一个重点内容—…

Elasticsearch:什么是非结构化数据?

非结构化数据定义 非结构化数据是指未按照设计的模型或结构组织的数据。 非结构化数据通常被归类为定性数据&#xff0c;可以是人类或机器生成的。 非结构化数据是最丰富的可用数据类型&#xff0c;经过分析后&#xff0c;可用于指导业务决策并在许多其他用例中实现业务目标。…

深入理解 Vue 组件:构建优雅的前端应用

&#x1f342;引言&#xff1a; Vue.js 是一款流行的 JavaScript 框架&#xff0c;以其简单易用和高度灵活的特性而受到了广泛的欢迎。其中的一个重要概念就是组件&#xff0c;它使我们能够将用户界面划分为可重用的、独立的部分。本文将深入探讨 Vue 组件的概念、使用和最佳实…

java原子类型

AtomicBoolean AtomicInteger AtomicLong AtomicReference<V> StringBuilder - 不是原子类型。StringBuilder 是 java.lang 包下的类 用法&#xff1a;无需回调改变数值

【学习记录】从0开始的Linux学习之旅——应用开发(helloworld)

一、概述 Linux操作系统通常是基于Linux内核&#xff0c;并结合GNU项目中的工具和应用程序而成。Linux操作系统支持多用户、多任务和多线程&#xff0c;具有强大的网络功能和良好的兼容性。本文主要讲述如何在linux系统上进行应用开发。 二、概念及原理 应用程序通过系统调用与…

今日现货黄金最新建议

近期现货黄金价格再度逼近历史高位&#xff0c;很多本来在场外观望的投资者&#xff0c;都纷纷希望进场一试身手。然而大涨大跌的行情并不是很适合新手投资者参与&#xff0c;如果大家还没做好技术上的准备&#xff0c;可以多听听正规交易平台的专业人士的意见。 在正式入市之前…

【LeetCode每日一题合集】2023.11.20-2023.11.26 (二叉树中的伪回文路径)

文章目录 53. 最大子数组和解法1——DP解法2——分治&#xff08;维护区间、类似线段树的思想&#xff09; 2216. 美化数组的最少删除数&#xff08;贪心&#xff09;2304. 网格中的最小路径代价1410. HTML 实体解析器&#xff08;模拟&#xff09;2824. 统计和小于目标的下标对…

jsp前端输入中文数据传到controller变成问号?的解决办法

还是写老师布置的实验的时候&#xff0c;解决了xml文件找不到的问题之后又遇到新的问题&#xff1a;前端登录处输入用户名和密码&#xff0c;结果明明输入的用户名是对的密码也是对的&#xff08;输入的用户名是中文&#xff09;&#xff0c;它就是显示用户名或密码错误。然后我…

mac 系统 vmware 安装centos8

选择镜像 安装系统 依次设置有告警的项目 设置用户名密码 设置root密码 重启系统 重启成功进入下面界面 勾选&#xff0c;点击done 点击箭头所指按钮 输入密码登录 安装成功了 设置网络 打开终端 切换root用户 输入下面指令 su root 输入root的密码 安装git

ESP网络开发实例-通过WebSocket控制步进电机

通过WebSocket控制步进电机 文章目录 通过WebSocket控制步进电机1、应用程序介绍2、软件准备3、硬件准备4、代码实现4.1 Web页面创建4.2 ESP32代码实现在这个 ESP32 网络服务器应用中,我们将介绍如何构建一个 ESP32 步进电机 WebSocket 网络服务器来控制步进电机的旋转。 这将…

【Cisco Packet Tracer】交换机 学习/更新/泛洪/VLAN实验

交换机的功能是连接计算机、服务器、网络打印机、网络摄像头、IP电话等终端设备&#xff0c;并实现与其它交换机、无线接入点、路由器、网络防火墙等网络设备的互联&#xff0c;从而构建局域网络&#xff0c;实现所有设备之间的通信。 本文使用Cisco Packet Tracer仿真软件&…

DynamicDataSource

DynamicDataSource 多数据源&#xff0c;读写分离&#xff0c;主从数据库

算法题--排椅子(贪心)

题目链接 code #include<bits/stdc.h> using namespace std;struct node{int indx;//用来存储数组下标int cnt;//用来计数 };bool cmp(node a,node b){ //判断是否是数字最大的一个就是经过最多谈话人的道return a.cnt>b.cnt; } node row[2010],cow[2010];bool cmp…

润和软件HopeStage与深信服终端安全管理系统完成产品兼容性互认证

近日&#xff0c;江苏润和软件股份有限公司&#xff08;以下简称“润和软件”&#xff09;HopeStage 操作系统与深信服科技股份有限公司&#xff08;以下简称“深信服”&#xff09;终端安全管理系统完成产品兼容性测试。 测试结果表明&#xff0c;企业级通用操作系统HopeStage…

Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!

1、背景 集群配置为&#xff1a;8 个 node 节点&#xff0c;16 核 32G&#xff0c;索引 4 分片 1 副本。应用程序的查询逻辑是按经纬度排序后找前 200 条文档。 1、应用对查询要求比较高&#xff0c;search 没有慢查询的状态。 2、集群压测性能不能上去&#xff0c;cpu 使用未打…

【已解决】如何打开设置了密码的7Z压缩文件?

7Z是一种常见的压缩文件格式&#xff0c;相比RAR和ZIP格式&#xff0c;它的压缩率更高&#xff0c;可以压缩出更小的文件体积&#xff0c;也同样可以设置密码保护&#xff0c;那设置了密码的7Z压缩文件要如何打开呢&#xff1f; 我们知道&#xff0c;7Z压缩文件设置密码保护后…