Java刷题常见的集合类,各种函数的使用以及常见的类型转化等等

Java刷题常见的集合类,各种函数的使用以及常见的类型转化等等

目录

前言

集合类

ArrayList

1. 创建和初始化 ArrayList

2.添加元素  add

3.获取元素 get

4.删除元素 remove

5.检查元素

 6.遍历 ArrayList

LinkedList

Stack

1. 创建Stack对象

2. 压入元素 (push) 

 3. 弹出元素 (pop)

 4. 查看栈顶元素 (peek)

 5. 检查栈是否为空 (empty)

Queue

1. 创建队列对象

2. 添加元素 (add 和 offer) 

 3. 移除元素 (poll 和 remove)

4. 查看队列头部元素 (peek 和 element) 

5. 队列大小 (size) 

6. 检查队列是否为空 (isEmpty) 

PriorityQueue

小根堆:

 大根堆

Set

1.创建 Set 实例

2. 添加元素 

3. 删除元素 

4. 检查是否包含某个元素 

5. 获取集合的大小 

 6. 判断集合是否为空

Map

 1. 基本创建 Map

2. 插入/更新元素 

3. 获取元素 

4. 检查键或值是否存在 

5. 删除元素 

6. 获取键集合、值集合和键值对集合(重)

 7. 遍历 Map

8. 默认值处理 

String类

1.字符串连接

2.字符串比较

3.字符串查找 

4.字符串替换和修改 

 5.字符串转换

 6.其他常用方法

StringBuffer(重)

1.追加字符串:append

2.插入字符串:insert 

 3.删除字符串:delete 和 deleteCharAt

 4.反转字符串:reverse

5.转换为 String:toString 

Math类

数组(Arrays)类

1.数组的排序

2.数组转化字符串

3.数组复制

4.数组填充

5.数组比较

其他操作 :

常见数据类型的最大值和最小值

 集合转化成数组

字符与字符串的转换 

 字符串和整型之间的转化


前言

相信大家在刷算法题的过程中,好不容易想出来大概的思路,也知道去用哪个集合类,但各个集合类的一些命令都长得太像,很容易将他们弄错,并且在各集合之间的转化也是特别烦人,还有很多实用的函数都知道可以去用,但总是会忘记。

本篇将会把刷题中常见的,实用的集合类的功能和各类函数都将详细说明(后续遇到慢慢补充)


集合类

ArrayList

1. 创建和初始化 ArrayList

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

默认容量为10

2.添加元素  add

添加单个元素(常用)

 list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); //list{1 2 3 4 5}

在指定位置添加元素: 

 list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(0,10); // [10, 1, 2, 3, 4, 5]

3.获取元素 get

获取指定索引位置的元素

 list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); int element = list.get(1); // 获取索引为 1 的元素 2

4.删除元素 remove

boolean contains = list.contains(10); // 检查是否包含值为 10 的元素 false 
 list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.remove(0); // 2 3 4 5 list.remove(list.size()-1); // 2 3 4 

5.检查元素

1)检查集合是否包含某个元素

boolean contains = list.contains(10); // 检查是否包含值为 10 的元素 false 

 2)检查集合是否为空

boolean isEmpty = list.isEmpty(); // 检查 ArrayList 是否为空 

 6.遍历 ArrayList

1)使用普通 for 循环遍历

for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); // 访问每一个元素 } 

2)使用增强 for 循环遍历: 

for (Integer num : list) { System.out.println(num); } 

3)使用迭代器遍历: 

Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } 

LinkedList

LinkedList和ArrayList命令上大体相同,他们都实现了List<E>接口

LinkedList 实现了 QueueDeque 接口,可以用作队列(FIFO)和栈(LIFO):


Stack

1. 创建Stack对象

用于创建一个新的栈,常用于存储数字、字符或其他对象。

Stack<Integer> stack = new Stack<>(); 

2. 压入元素 (push

push(E item)方法用于将元素推入栈顶。

stack.push(10); stack.push(20); stack.push(30); // 10 20 30

 3. 弹出元素 (pop)

pop()方法用于移除并返回栈顶元素。如果栈为空,调用该方法会抛出EmptyStackException异常。需要注意栈为空时使用时需检查栈是否为空,避免异常。

int topElement = stack.pop(); // 30

 4. 查看栈顶元素 (peek)

peek()方法用于查看栈顶元素,但不会移除它。如果栈为空,同样会抛出EmptyStackException异常。

int topElement = stack.peek(); // stack{10,20} 20 

 5. 检查栈是否为空 (empty)

 empty()方法返回true如果栈为空,false如果栈不为空。这个方法在判断栈是否可以继续操作时非常有用。

boolean isEmpty = stack.empty(); // false 

Queue

1. 创建队列对象

Queue<Integer> queue = new LinkedList<>(); // 或使用 ArrayDeque,性能更好 Queue<Integer> queue = new ArrayDeque<>(); 

2. 添加元素 (add 和 offer

在刷题中,offer 比较常用 

queue.add(10); // 抛出异常:如果队列已满,则抛出 IllegalStateException queue.offer(20); // 返回 true/false:如果队列已满,返回 false 

 3. 移除元素 (poll 和 remove)

 poll() 更常用

int element = queue.poll(); // 移除并返回队列头部的元素,队列为空时返回 null int element = queue.remove(); // 移除并返回队列头部的元素,队列为空时抛出 NoSuchElementException 

4. 查看队列头部元素 (peek 和 element

peek() 方法更常用,因为它更安全,不会抛出异常。

int element = queue.peek(); // 返回队列头部的元素,队列为空时返回 null int element = queue.element(); // 返回队列头部的元素,队列为空时抛出 NoSuchElementException 

5. 队列大小 (size

返回队列中元素的数量,通常用于判断队列是否为空。

int size = queue.size(); // 获取队列中元素的数量 

6. 检查队列是否为空 (isEmpty

 返回 true 如果队列为空,false 如果队列不为空。常用于循环前检查队列是否有元素。

boolean isEmpty = queue.isEmpty(); // 判断队列是否为空 


PriorityQueue

PriotyQueue跟Queue命令大体相似,但它也是刷题中经常遇到的,因为它可以创建大小根堆

大根堆(Max-Heap):每个父节点的值大于或等于其子节点的值,根节点为最大元素。小根堆(Min-Heap):每个父节点的值小于或等于其子节点的值,根节点为最小元素。

小根堆:

 // 创建小根堆 //默认就是小根堆 PriorityQueue<Integer> minHeap = new PriorityQueue<>(); // 向小根堆插入元素 minHeap.offer(10); minHeap.offer(20); minHeap.offer(5); minHeap.offer(30); // 输出堆顶元素(最小元素) System.out.println("小根堆堆顶元素:" + minHeap.peek()); // 输出 5 // 删除堆顶元素(最小元素) System.out.println("删除堆顶元素:" + minHeap.poll()); // 输出 5 // 输出删除堆顶后的堆顶元素 System.out.println("删除后堆顶元素:" + minHeap.peek()); // 输出 10

 大根堆

 // 创建大根堆(使用自定义的比较器实现降序排列) PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a,b)-> b - a); // PriorityQueue<Integer> max = new PriorityQueue<>(Comparator.reverseOrder()); // 向大根堆插入元素 maxHeap.offer(10); maxHeap.offer(20); maxHeap.offer(5); maxHeap.offer(30); // 输出堆顶元素(最大元素) System.out.println("大根堆堆顶元素:" + maxHeap.peek()); // 输出 30 // 删除堆顶元素(最大元素) System.out.println("删除堆顶元素:" + maxHeap.poll()); // 输出 30 // 输出删除堆顶后的堆顶元素 System.out.println("删除后堆顶元素:" + maxHeap.peek()); // 输出 20

Set

1.创建 Set 实例

3种方法任选一种

Set<Integer> set = new HashSet<>(); Set<Integer> linkedSet = new LinkedHashSet<>(); Set<Integer> treeSet = new TreeSet<>(); 

2. 添加元素 

set.add(1); // 添加元素,如果元素已存在,返回 false set.add(2); set.add(3); 

3. 删除元素 

set.remove(2); // 删除元素2 

4. 检查是否包含某个元素 

boolean contains = set.contains(3); // 返回 true 如果包含元素3 

5. 获取集合的大小 

int size = set.size(); // 返回集合的元素个数 

 6. 判断集合是否为空

boolean isEmpty = set.isEmpty(); // 如果集合为空,返回 true 

7.遍历 

1)使用迭代器遍历

Iterator<Integer> iterator = set.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } 

2)使用增强型 for 循环遍历 

for (Integer num : set) { System.out.println(num); } 

7.Set 转换为 List 

List<Integer> list = new ArrayList<>(set); // 转换为 List 

Map

 1. 基本创建 Map

Map<K, V> map = new HashMap<>(); 
K 是键的类型,V 是值的类型。可以使用 HashMapTreeMapLinkedHashMap 等不同实现类。经常使用HashMap类,O(1)
 Map<Integer,Integer> map = new HashMap<>(); Map<Integer,Integer> map1 = new TreeMap<>(); Map<Integer,Integer> map2= new LinkedHashMap<>();

2. 插入/更新元素 

map.put(K key, V value); // 插入或更新元素,如果key已经存在,值会被更新 

3. 获取元素 

V value = map.get(K key); // 根据键获取对应的值,若键不存在返回 null 

4. 检查键或值是否存在 

boolean containsKey(Object key); // 判断map中是否存在指定的key boolean containsValue(Object value); // 判断map中是否存在指定的value 

5. 删除元素 

map.remove(K key); // 根据key删除键值对 

6. 获取键集合、值集合和键值对集合(重)

Set<K> keySet = map.keySet(); // 获取所有键 Collection<V> values = map.values(); // 获取所有值 Set<Map.Entry<K, V>> entrySet = map.entrySet(); // 获取所有的键值对 
 Map<String,Integer> hash = new HashMap<>(); hash.put("hhh",1); hash.put("ggg",2); hash.put("www",3); Set<String> keySet = hash.keySet(); System.out.println(keySet); Collection<Integer> values = hash.values(); System.out.println(values); Set<Map.Entry<String, Integer>> entrySet = hash.entrySet(); System.out.println(entrySet); 

 7. 遍历 Map

// 使用增强for循环遍历entrySet for (Map.Entry<K, V> entry : map.entrySet()) { K key = entry.getKey(); V value = entry.getValue(); } // 使用lambda表达式遍历 map.forEach((key, value) -> { System.out.println(key + ": " + value); }); 

 Map<String,Integer> hash = new HashMap<>(); hash.put("hhh",1); hash.put("ggg",2); hash.put("www",3); //遍历key for(String key :hash.keySet()) { System.out.print(key+" "); } System.out.println(); //遍历values for(Integer value :hash.values()) { System.out.print(value+" "); } System.out.println(); //遍历整个map for (Map.Entry<String,Integer> entry :hash.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); } //lambda 遍历map System.out.println(); hash.forEach((key,value)->{ System.out.println(key + ":" + value); });

8. 默认值处理 

V value = map.getOrDefault(K key, V defaultValue); // 如果key存在,返回对应的值,否则返回默认值 

String类

1.字符串连接

String.concat(String str)

将给定的字符串拼接到当前字符串的末尾。相当于 + 操作符,但效率较高。 

String str = "Hello"; str = str.concat(" World"); // str = "Hello World" 

2.字符串比较

1)  判断当前字符串和指定字符串是否相等。比较的是字符序列是否相同。

String.equals(Object obj)
String str1 = "Hello"; String str2 = "hello"; boolean isEqual = str1.equals(str2); // false 

2) 忽略大小写比较两个字符串是否相等。

String.equalsIgnoreCase(String anotherString)
String str1 = "Hello"; String str2 = "hello"; boolean isEqual = str1.equalsIgnoreCase(str2); // true 

 3)字符串按字典顺序比较,返回一个整数:

  • 0 表示两个字符串相等;
  • < 0 表示当前字符串在字典序中小于给定字符串;
  • > 0 表示当前字符串在字典序中大于给定字符串。
String.compareTo(String anotherString)
String str1 = "apple"; String str2 = "banana"; int result = str1.compareTo(str2); // result < 0 

 4)忽略大小写进行字典序比较。

String str1 = "apple"; String str2 = "APPLE"; int result = str1.compareToIgnoreCase(str2); // result == 0 

3.字符串查找 

1)返回指定子字符串首次出现的索引位置。如果没有找到,返回 -1

String.indexOf(String str)
String str = "Hello, World!"; int index = str.indexOf("W"); // index = 7 int index = str.indexOf("M"); // index = -1

 2)返回指定子字符串最后一次出现的索引位置。

String.lastIndexOf(String str)
 String str = "aaaaabbbbba"; int index = str.lastIndexOf("a"); //index=10

3)判断当前字符串是否包含指定的子字符串,返回布尔值。 

String.contains(CharSequence sequence)
String str = "Hello, World!"; boolean contains = str.contains("World"); // true 

4)判断当前字符串是否以指定的前缀开头。 

String.startsWith(String prefix)
String str = "Hello"; boolean startsWith = str.startsWith("He"); // true 

5)判断当前字符串是否以指定的后缀结尾。

String.endsWith(String suffix)
String str = "Hello"; boolean endsWith = str.endsWith("lo"); // true 

4.字符串替换和修改 

1)替换字符串中的字符。返回一个新的字符串,原字符串不变。

String.replace(char oldChar, char newChar)
String str = "hello"; String newStr = str.replace('l', 'p'); // newStr = "heppo" 

 2)字符串截取

1)返回从指定索引开始到字符串末尾的子字符串

String.substring(int beginIndex)
String str = "Hello World!"; String subStr = str.substring(6); // subStr = "World!" 

2) 返回从 beginIndexendIndex 之间的子字符串。

String.substring(int beginIndex, int endIndex)
String str = "Hello World!"; String subStr = str.substring(0, 5); // subStr = "Hello" 

 5.字符串转换

 1)将字符串转换为小写字母。

String.toLowerCase()
String str = "HELLO"; String lowerStr = str.toLowerCase(); // lowerStr = "hello" 

 2)将字符串转换为大写字母。

String.toUpperCase()
String str = "hello"; String upperStr = str.toUpperCase(); // upperStr = "HELLO" 

 3)去掉字符串前后的空白字符。

String.trim()
String str = " Hello World! "; String trimmedStr = str.trim(); // trimmedStr = "Hello World!" 

 4)将其他类型的数据(如 intbooleanchar 等)转换为字符串。

String.valueOf()
int num = 100; String str = String.valueOf(num); // str = "100" 

 6.其他常用方法

1)根据正则表达式将字符串拆分成数组。

String.split(String regex)
String str = "apple,banana,orange"; String[] arr = str.split(","); // arr = ["apple", "banana", "orange"] 

2) 将多个字符串连接成一个字符串,中间用指定的分隔符。

String.join(CharSequence delimiter, CharSequence... elements)
String result = String.join(",", "apple", "banana", "orange"); // "apple,banana,orange" 

StringBuffer(重)

1.追加字符串:append

将指定的内容追加到 StringBuffer 末尾。

 StringBuffer stringBuffer = new StringBuffer(); // 默认容量为16 stringBuffer.append("hello"); stringBuffer.append(" "); stringBuffer.append("world!"); // hello world!

2.插入字符串:insert 

将指定的内容插入到指定位置。 

 StringBuffer stringBuffer = new StringBuffer(); // 默认容量为16 stringBuffer.append("hello"); stringBuffer.append(" "); stringBuffer.append("world!"); stringBuffer.insert(6,"hi "); // hello hi world!

 3.删除字符串:delete 和 deleteCharAt

  • delete(start, end):删除从 start 到 end(不包括 end)的字符。
  • deleteCharAt(index):删除指定索引处的字符。
 StringBuffer stringBuffer = new StringBuffer(); // 默认容量为16 stringBuffer.append("hello"); stringBuffer.append(" "); stringBuffer.append("world!"); stringBuffer.delete(0,5); // world!
 stringBuffer.append("hello"); stringBuffer.deleteCharAt(stringBuffer.length()-1); // hell

 4.反转字符串:reverse

StringBuffer 中的字符序列反转。

 stringBuffer.append("hello"); stringBuffer.reverse(); // olleh

5.转换为 StringtoString 

 stringBuffer.append("hello"); String str = stringBuffer.toString(); //hello

 ..................

StringBuilder(线程不安全) 跟StringBuffer(线程安全)类似 功能基本一致

String -> integer  -> char数组


Math类

列举一些主要的数学函数

1.绝对值:abs

返回参数的绝对值。

Math.abs(-5); // 5 Math.abs(3.14); // 3.14 

 平方根:sqrt

返回参数的平方根。如果参数为负数,则返回 NaN

Math.sqrt(16); // 4.0 Math.sqrt(2); // 1.4142135623730951 

幂运算:pow 

返回第一个参数的第二个参数次方。

Math.pow(2, 3); // 8.0 Math.pow(3, 0); // 1.0 

最大值和最小值:max 和 min

返回两个数中的最大值或最小值。

Math.max(5, 10); // 10 Math.min(5, 10); // 5 

四舍五入:round 

 返回最接近的整数(四舍五入),并将结果作为 long 类型返回。

Math.round(3.6); // 4 Math.round(3.4); // 3 

向上取整:ceil

返回大于或等于参数的最小整数值,结果是 double 类型。 

Math.ceil(3.1); // 4.0 Math.ceil(3.9); // 4.0 

指数运算:exp

计算 e 的 x 次方,等效于 Math.pow(Math.E, x)

Math.exp(1); // 2.718281828459045 

数组(Arrays)类

1.数组的排序

1)默认是以升序状态

Arrays.sort(array)
 int[] arr = {10,5,12,45,32,20,18}; Arrays.sort(arr); System.out.println(Arrays.toString(arr));

 

2)用于自定义排序规则。适用于对象类型的数组  降序排序

 Integer[] arr = {10,5,12,45,32,20,18}; Arrays.sort(arr,(a,b)-> b - a); System.out.println(Arrays.toString(arr)); //[45, 32, 20, 18, 12, 10, 5]

2.数组转化字符串

1)一维数组(常用)

Arrays.toString(array)
int[] arr = {1, 2, 3}; String str = Arrays.toString(arr); // "[1, 2, 3]" 

 2)二维数组

Arrays.deepToString(array)
int[][] arr = {{1, 2}, {3, 4}}; String str = Arrays.deepToString(arr); // "[[1, 2], [3, 4]]" 

3.数组复制

1)创建一个新数组,包含原数组的前 newLength 个元素。如果新长度大于原数组长度,则新增元素会被填充为默认值(如 0)。

Arrays.copyOf(array, newLength)
int[] arr = {1, 2, 3}; int[] newArr = Arrays.copyOf(arr, 5); // [1, 2, 3, 0, 0] 

2) 创建一个新数组,复制原数组指定范围的元素(from 包含,to 不包含)。 

Arrays.copyOfRange(array, from, to)
int[] arr = {1, 2, 3, 4, 5}; int[] subArr = Arrays.copyOfRange(arr, 1, 4); // [2, 3, 4] 

4.数组填充

1)将数组中的所有元素设置为指定的值。 

Arrays.fill(array, value)
int[] arr = new int[5]; Arrays.fill(arr, 7); // [7, 7, 7, 7, 7] 

 2)将数组中从 fromIndextoIndex 范围内的元素设置为指定值。 

Arrays.fill(array, fromIndex, toIndex, value) 
int[] arr = new int[5]; Arrays.fill(arr, 1, 4, 9); // [0, 9, 9, 9, 0] 

5.数组比较

判断两个数组是否相等。数组相等的标准是数组的长度相同且对应位置的元素相等。 

Arrays.equals(array1, array2)
int[] arr1 = {1, 2, 3}; int[] arr2 = {1, 2, 3}; boolean isEqual = Arrays.equals(arr1, arr2); // true 

其他操作 :

常见数据类型的最大值和最小值

Integer.MAX_VALUE / Integer.MIN_VALUE Long.MAX_VALUE / Long.MIN_VALUE Float.MAX_VALUE / Float.MIN_VALUE Double.MAX_VALUE / Double.MIN_VALUE

 集合转化成数组

 // 将 List 转换为数组 String[] array = list.toArray(new String[0]); // 将 Set 转换为数组 String[] array = set.toArray(new String[0]); // 将 Queue 转换为数组 String[] array = queue.toArray(new String[0]); // 将 Map 的键转换为数组 String[] keys = map.keySet().toArray(new String[0]); // 将 Map 的值转换为数组 String[] values = map.values().toArray(new String[0]);
对于 ListSet 和 Queue,可以使用 toArray() 方法直接将其转换为数组。对于 Map,你可以选择将其键、值或条目转换为数组,使用 keySet()values() 或 entrySet() 方法。

字符与字符串的转换 

1)字符数组转字符串String.valueOf() 或 String 构造函数。

char[] charArray = {'a', 'b', 'c'}; String str = new String(charArray); // str = "abc" 

2)字符串转字符:使用 charAt() 获取指定位置的字符。

String str = "hello"; char ch = str.charAt(0); // ch = 'h' 

 字符串和整型之间的转化

1)字符串转整型(String -> int)

要将字符串转换为整型,可以使用 Integer.parseInt()Integer.valueOf() 方法。

String str = "123"; int num = Integer.parseInt(str); System.out.println(num); // 输出:123 
String str = "123"; int num = Integer.valueOf(str); // 返回的是 Integer 对象 System.out.println(num); // 输出:123 

 2)整型转字符串(int -> String)

要将整型转换为字符串,可以使用 String.valueOf()Integer.toString() 方法。

int num = 123; String str = String.valueOf(num); System.out.println(str); // 输出:"123" 
int num = 123; String str = Integer.toString(num); System.out.println(str); // 输出:"123" 

 .............................

 还有遗留的等遇到会慢慢补充,这个会长期更新...

感谢大家的支持!!!

Read more

C++ 模板进阶:特化、萃取与可变参数模板

C++ 模板进阶:特化、萃取与可变参数模板

C++ 模板进阶:特化、萃取与可变参数模板 💡 学习目标:掌握模板进阶技术的核心用法,理解模板特化的深层应用、类型萃取的实现原理,以及可变参数模板的灵活使用,提升泛型编程的实战能力。 💡 学习重点:模板特化的进阶场景、类型萃取工具的设计与应用、可变参数模板的展开技巧、折叠表达式的使用方法。 一、模板特化进阶:处理复杂类型场景 💡 模板特化不只是针对单一类型的定制,还能处理指针、引用、数组等复杂类型,实现更精细的类型适配逻辑。 1.1 指针类型的模板特化 通用模板默认处理普通类型,我们可以为指针类型单独编写特化版本,实现指针专属的逻辑。 #include<iostream>#include<string>usingnamespace std;// 通用模板:处理普通类型template<typenameT>classTypeProcessor{public:staticvoidprocess(T data){ cout

By Ne0inhk

C++ 设计模式概述及常用模式

C++ 设计模式概述 本文介绍了C++中23种设计模式的分类及实现示例,主要分为三大类: 创建型模式(5个):单例模式(常用)、工厂方法模式(常用)、抽象工厂模式(常用)、建造者模式和原型模式。这些模式专注于对象的创建机制。 结构型模式(7个):适配器模式(常用)、桥接模式、组合模式和装饰器模式(常用)等。这些模式处理类和对象的组合方式。 行为型模式:未完整列出,但包含观察者模式等(未展示完整代码)。 文章通过简洁的C++代码示例展示了常用设计模式的实现方法,如单例模式通过私有构造函数和静态方法确保唯一实例,工厂方法模式通过抽象工厂类创建产品等。这些模式为解决特定设计问题提供了可重用的解决方案。 C++ 设计模式概述及常用模式 设计模式可分为三大类:创建型、结构型、行为型。以下是23个设计模式的分类及代码示例: 一、创建型模式(5个) 1. 单例模式(Singleton)⭐ 常用 classSingleton{private:static

By Ne0inhk
C++测试与调试:确保代码质量与稳定性

C++测试与调试:确保代码质量与稳定性

C++测试与调试:确保代码质量与稳定性 一、学习目标与重点 本章将深入探讨C++测试与调试的核心知识,帮助你确保代码的质量与稳定性。通过学习,你将能够: 1. 理解测试与调试的基本概念,掌握测试方法和工具 2. 学会使用单元测试框架,如Google Test和Catch2 3. 理解集成测试的重要性,确保系统的功能正确性 4. 学会使用调试工具,如GDB和Visual Studio调试器 5. 培养测试与调试思维,设计高质量的代码 二、测试的基本概念 2.1 测试的分类 测试可以分为以下几类: * 单元测试:测试单个函数或类的功能 * 集成测试:测试多个模块的集成功能 * 系统测试:测试整个系统的功能 * 验收测试:测试系统是否满足用户需求 * 性能测试:测试系统的性能指标 2.2 测试原则 测试应该遵循以下原则: * 测试应该尽可能早地进行 * 测试应该覆盖所有可能的场景 * 测试应该是自动化的

By Ne0inhk

Java + Vue 毕业设计选题效率提升指南:从脚手架到自动化部署的全链路优化

毕业设计季又到了,对于计算机专业的同学来说,用 Java 做后端,Vue 做前端,是一个非常经典且实用的技术栈组合。但很多同学在真正动手时,常常被各种“琐事”绊住,比如环境配半天、前后端接口对不上、部署时手忙脚乱,导致宝贵的开发时间被大量浪费。今天,我就结合自己带学弟学妹做毕设的经验,聊聊如何通过一套标准化的流程和工具,把 Java + Vue 毕设的开发效率提上去,让你把精力真正花在业务逻辑和创新点上。 1. 毕业设计效率痛点:我们到底在哪儿“卡”住了? 在开始技术选型之前,我们先得搞清楚,做 Java + Vue 毕设时,哪些环节最容易“掉链子”。根据我的观察,主要有这么几个: 1. 环境配置地狱:这是第一个拦路虎。A 同学的 MySQL 是 8.0,B 同学是

By Ne0inhk