c#集合詳解-Dictionary、List、Queue、Stack等

目錄

一,非泛型集合

1,ArrayList

(1)創建和初始化ArrayList()

(2)常用方法

①Add(value)

②AddRange(value)

③Insert(index,value)

④Remove(value)

⑤RemoveAt(index)

⑥clear()

⑦Contains(value)

⑧IndexOf(value)

⑨Sort()

⑩Reverse()

(3)總結

2,Hashtable

(1)創建Hashtable

(2)常用方法

①Add()

②ContainsKey(value)

③containsValue(value)

④Remove(Key)

⑤clear()

⑥keys屬性

⑦values屬性

⑧索引器

(3)總結

二,泛型集合

1,List

(1)創建List的兩種方式

①創建一個空的List

②使用初始化器創建List

(2)List常用方法

①Add(value)

②Insert(index,value)

③Remove(value)

④RemoveAt(index)

⑤clear()

⑥contains(value)

⑦IndexOf(value)

⑧Count

⑨Sort()

⑩Reverse()

2,Dictionary,value>

(1)創建Dictionary的兩種方式

①創建一個空的Dictionary

②使用初始化器創建并初始化Dictionary

(2)常用方法和屬性

①Add(key,value)

②containskey(key)

③containsValue(value)

④Remove(key)

⑤clear()

⑥Count

⑦索引器

(3)遍歷字典

3,Queue

(1)創建隊列

(2)常用方法和屬性

(3)遍歷隊列

4,Stack

(1)創建棧

(2)常用方法和屬性

(3)遍歷棧

5,HashSet

(1)創建HashSet

(2)常用方法

(3)遍歷HashSet

6,SortedList,>

(1)SortedList的基本特性

(2)常用方法和屬性

(3)遍歷SortedList

三,總結


集合是用于存儲,管理和操作數據的容器,集合提供了不同的數據結構和方法,方便對數據進行增、刪、查、改等操作。

C#提供了多種集合類型,分為兩大類:

1,非泛型集合:如ArrayList,Hashtable等

2,泛型集合:如List<T>,Dictionary<Key,Value>,Queue<T>,stack<T>,HashSet<T>, SortedList<Key,Value>等

(1)List<T>:動態數組,存儲任意類型的數據嗎,支持按索引訪問

(2)Dictionary<key,value>:鍵值對集合,每個元素有一個鍵和一個值組成

(3)Queue<T>:隊列,先進先出

(4)Stack<T>:棧,后進后出

(5)HashSet<T>:無重復元素的集合,常用于判斷集合中是否存在某個元素

(6)SortedList<key,value>:按鍵排序的鍵值對集合

一,非泛型集合

常見的非泛型集合:

1,ArrayList

動態數組,允許存儲不同的類型的元素,位于System.Collections命名空間下,大小可以動態變化,類似數組,但可以在運行時調整其大小,ArrayList具有類似數組的功能,但是同時允許動態增加和刪除元素

(1)創建和初始化ArrayList()

可以通過不同的方式來創建ArrayList

例:

using System;using System.Collections;class Program
{static void Main(){// 創建一個空的 ArrayListArrayList list1 = new ArrayList();// 使用初始容量創建 ArrayListArrayList list2 = new ArrayList(10); ?// 初始容量為 10// 從數組創建 ArrayListint[] numbers = { 1, 2, 3, 4, 5 };ArrayList list3 = new ArrayList(numbers);// 使用集合初始化ArrayList list4 = new ArrayList { 10, "Hello", 3.14, true };// 輸出初始化的 ArrayListConsole.WriteLine("list4:");foreach (var item in list4){Console.WriteLine(item);}}}

輸出

list4:

10

Hello

3.14

True

(2)常用方法

①Add(value)

向ArrayList中添加一個元素

例:

ArrayList list = new ArrayList();

list.Add(10);

list.Add("Hello");

Console.WriteLine(list[0]); // 輸出:10

Console.WriteLine(list[1]); // 輸出:Hello

②AddRange(value)

向ArrayList中添加一個集合中的所有元素

例:

ArrayList list1 = new ArrayList() { 1, 2, 3 };

ArrayList list2 = new ArrayList() { 4, 5, 6 };

list1.AddRange(list2);

Console.WriteLine(string.Join(", ", list1)); ?// 輸出:1, 2, 3, 4, 5, 6

③Insert(index,value)

在指定的位置插入元素

例:

ArrayList list = new ArrayList() { 1, 2, 4 };

list.Insert(2, 3); // 在索引 2 位置插入元素 3

Console.WriteLine(string.Join(", ", list)); ?// 輸出:1, 2, 3, 4

④Remove(value)

從ArrayList中刪除第一次出現的指定的元素

例:

ArrayList list = new ArrayList() { 1, 2, 3, 4, 5 };

list.Remove(3); // 刪除元素 3

Console.WriteLine(string.Join(", ", list)); ?// 輸出:1, 2, 4, 5

⑤RemoveAt(index)

刪除指定索引位置的元素

例:

ArrayList list = new ArrayList() { 1, 2, 3, 4 };

list.RemoveAt(1); // 刪除索引 1 處的元素

Console.WriteLine(string.Join(", ", list)); ?// 輸出:1, 3, 4

⑥clear()

刪除ArrayList中的所有元素

例:

ArrayList list = new ArrayList() { 1, 2, 3, 4 };

list.Clear();

Console.WriteLine(list.Count); ?// 輸出:0

⑦Contains(value)

判斷ArrayList中是否包含指定的元素

例:

ArrayList list = new ArrayList() { 1, 2, 3, 4 };

Console.WriteLine(list.Contains(3)); ?// 輸出:True

Console.WriteLine(list.Contains(5)); ?// 輸出:False

⑧IndexOf(value)

返回指定元素在ArrayList中第一次出現的位置,如果元素不存在則返回-1

例:

ArrayList list = new ArrayList() { 1, 2, 3, 4 };

Console.WriteLine(list.IndexOf(3)); ?// 輸出:2

Console.WriteLine(list.IndexOf(5)); ?// 輸出:-1

⑨Sort()

對ArrayList中的元素進行排序(默認升序)

例:

ArrayList list = new ArrayList() { 4, 2, 1, 3 };

list.Sort();

Console.WriteLine(string.Join(", ", list)); ?// 輸出:1, 2, 3, 4

⑩Reverse()

將ArrayList中元素順序反轉

例:

ArrayList list = new ArrayList() { 1, 2, 3, 4 };

list.Reverse();

Console.WriteLine(string.Join(", ", list)); ?// 輸出:4, 3, 2, 1

(3)總結

優點:動態大小,可以自動擴展,可以存儲任意類型的數據

缺點:ArrayList性能較低,因為它是非泛型集合,在增刪操作時都需要進行裝箱和拆箱操作,所以目前一般推薦使用List<T>來替代ArrayList

2,Hashtable

Hashtable位于System.Collections命名空間下,它存儲的是鍵值對(key-value)形式的數據,類似于字典,每個鍵(key)在Hashtable中必須是唯一的,而值(value)可以重復

Hashtable可以通過鍵來快速的查找對應的值,它實現了哈希表數據結構,提供了高效的查找,插入和刪除操作

(1)創建Hashtable

例:

using System;using System.Collections;class Program
{static void Main(){// 創建一個空的 HashtableHashtable hashtable = new Hashtable();// 使用 Add 方法添加鍵值對hashtable.Add("name", "John");hashtable.Add("age", 30);hashtable.Add("country", "USA");// 通過索引器直接添加hashtable["city"] = "New York";// 輸出內容Console.WriteLine("Name: " + hashtable["name"]);Console.WriteLine("Age: " + hashtable["age"]);Console.WriteLine("Country: " + hashtable["country"]);Console.WriteLine("City: " + hashtable["city"]);}}

輸出

Name: John

Age: 30

Country: USA

City: New York

(2)常用方法

①Add()

添加鍵值對,如果鍵已存在,則會拋出異常

例:

Hashtable hashtable = new Hashtable();

hashtable.Add("name", "Alice");

hashtable.Add("age", 25);

②ContainsKey(value)

判斷Hashtable中是否包含指定的鍵

例:

bool contains = hashtable.ContainsKey("name");

Console.WriteLine(contains); ?// 輸出:True

③containsValue(value)

判斷Hashtable中是否包含指定的值

例:

bool containsValue = hashtable.ContainsValue(25);

Console.WriteLine(containsValue); ?// 輸出:True

④Remove(Key)

根據鍵刪除指定的鍵值對,如果鍵不存在,則什么也不做

例:

hashtable.Remove("age");

Console.WriteLine(hashtable.ContainsKey("age")); ?// 輸出:False

⑤clear()

清空所有鍵值對

例:

hashtable.Clear();

Console.WriteLine(hashtable.Count); ?// 輸出:0

⑥keys屬性

獲取Hashtable中所有的鍵

例:

foreach (var key in hashtable.Keys)

{

????Console.WriteLine(key); ?// 輸出所有鍵

}

⑦values屬性

獲取所有的值

例:

foreach (var value in hashtable.Values)

{

????Console.WriteLine(value); ?// 輸出所有值

}

⑧索引器

使用索引器來訪問指定鍵的值

例:

Console.WriteLine(hashtable["name"]); ?// 輸出:"Alice"

(3)總結

與ArrayList類似,性能較低,推薦使用泛型的Dictionary<Key,Value>來代替

二,泛型集合

泛型集合在定義集合時可以指定元素的類型,而不需要在代碼中提前確定具體的類型

1,List<T>

List<T>位于System.Collections.Generic命名空間下,它表示一個動態數組,與 ArrayList類似,推薦使用List<T>

(1)創建List<T>的兩種方式

①創建一個空的List
using System;using System.Collections.Generic;class Program{static void Main(){List<int> numbers = new List<int>(); ?// 創建一個空的 List<int>// 向 List 中添加元素numbers.Add(10);numbers.Add(20);numbers.Add(30);// 輸出所有元素foreach (var number in numbers){Console.WriteLine(number);}}}
②使用初始化器創建List<T>

例:

using System;using System.Collections.Generic;class Program{static void Main(){List<int> numbers = new List<int> { 10, 20, 30 }; ?// 創建并初始化 List<int>// 輸出所有元素foreach (var number in numbers){Console.WriteLine(number);}}}

(2)List常用方法

①Add(value)

向List中添加元素

例:

List<int> numbers = new List<int>();

numbers.Add(10); ?// 向列表中添加數字 10

②Insert(index,value)

在指定索引處插入元素,其他元素后移

例:

numbers.Insert(1, 15); ?// 在索引 1 處插入數字 15

③Remove(value)

移除List<T>中第一次出現的指定元素

例:

numbers.Remove(15); ?// 移除值為 15 的元素

④RemoveAt(index)

移除指定索引位置的元素

例:

numbers.RemoveAt(0); ?// 移除索引 0 處的元素

⑤clear()

移除List中的所有元素

例:

numbers.Clear(); ?// 清空列表

⑥contains(value)

檢查List是否包含指定的元素

例:

bool contains = numbers.Contains(10); ?// 檢查是否包含值 10

Console.WriteLine(contains); ?// 輸出:True

⑦IndexOf(value)

返回指定元素的位置,如果不存在,返回-1

例:

int index = numbers.IndexOf(20); ?// 返回值 20 的索引

Console.WriteLine(index); ?// 輸出:1

⑧Count

獲取List中元素的數量

例:

int count = numbers.Count; ?// 獲取列表的元素數量

Console.WriteLine(count); ?// 輸出:2

⑨Sort()

對List中的元素排序

例:

numbers.Sort(); ?// 對數字列表進行排序

⑩Reverse()

對List中的元素進行反轉

例:

numbers.Reverse(); ?// 反轉列表中的元素

2,Dictionary<Key,Value>

Dictionary位于System.Collection.Generic命名空間下,與上面講的Hashtable類似,也是一個基于鍵值對的集合,可以提供快速的查找,插入和刪除操作(時間復雜度為O(1)),相比上面的Hashtable,推薦使用Dictionary。不過由于使用哈希表實現,字典的元素存儲時是無序的,如果需要有序的字典,可以使用SortedDictionary<Key,Value>

(1)創建Dictionary的兩種方式

①創建一個空的Dictionary
using System;using System.Collections.Generic;class Program{static void Main(){Dictionary<int, string> dict = new Dictionary<int, string>(); ?// 創建一個空字典// 向字典中添加元素dict.Add(1, "Apple");dict.Add(2, "Banana");dict.Add(3, "Cherry");// 輸出所有鍵值對foreach (var kvp in dict){Console.WriteLine("Key: {kvp.Key}, Value: {kvp.Value}");}}}
②使用初始化器創建并初始化Dictionary
using System;using System.Collections.Generic;class Program
{static void Main(){Dictionary<int, string> dict = new Dictionary<int, string>{{ 1, "Apple" },{ 2, "Banana" },{ 3, "Cherry" }};// 輸出所有鍵值對foreach (var kvp in dict){Console.WriteLine("Key: {kvp.Key}, Value: {kvp.Value}");}}}

(2)常用方法和屬性

①Add(key,value)

向字典中添加一個新的鍵值對,如果鍵已經存在,則會拋出異常

例:

dict.Add(4, "Date"); ?// 向字典中添加新的鍵值對

②containskey(key)

判斷字典中是否包含指定的鍵

例:

bool contains = dict.ContainsKey(2); ?// 檢查字典中是否包含鍵為 2 的項

Console.WriteLine(contains); ?// 輸出:True

③containsValue(value)

檢查字典是否包含指定的值

例:

bool contains = dict.ContainsValue("Banana"); ?// 檢查字典中是否包含值 "Banana"

Console.WriteLine(contains); ?// 輸出:True

④Remove(key)

根據給出的鍵移除字典中的鍵值對,如果鍵不存在,則返回false

例:

bool removed = dict.Remove(3); ?// 移除鍵為 3 的項

Console.WriteLine(removed); ?// 輸出:True

⑤clear()

移除字典中的所有鍵值對

例:

dict.Clear(); ?// 清空字典

⑥Count

獲取字典中鍵值對的數量

例:

int count = dict.Count; ?// 獲取字典中的元素個數

Console.WriteLine(count); ?// 輸出:2

⑦索引器

根據鍵來訪問字典中對應的值,如果不存在,拋出異常

例:

string value = dict[1]; ?// 獲取鍵為 1 的值

Console.WriteLine(value); ?// 輸出:Apple

(3)遍歷字典

可以通過foreach循環遍歷字典,前面使用的遍歷不做說明

foreach (var kvp in dict)

{

????Console.WriteLine("Key: {kvp.Key}, Value: {kvp.Value}");

}

3,Queue<T>

也就是隊列,原則是先進先出,位于System.Collections.Generic命名空間下,它的特點是先進先出

(1)創建隊列

Queue<T> queue = new Queue<T>();

(2)常用方法和屬性

①Enqueue(value):向隊列的末尾添加一個元素

②Dequeue():從隊列的開頭移除并返回此元素,如果隊列為空,報錯

③Peek():返回隊列的第一個元素,但不移除它,如果隊列為空,報錯

④Count:獲取隊列中當前元素的數量

⑤clear():移除隊列的所有元素

⑥Contains(value):檢查隊列中是否包含指定的元素

⑦ToArray():將隊列的元素復制到一個新的數組中

(3)遍歷隊列

在遍歷時用foreach

例:

Queue<int> queue = new Queue<int>();

queue.Enqueue(1);

queue.Enqueue(2);

queue.Enqueue(3);

foreach (var item in queue)

{

????Console.WriteLine(item); ?// 輸出:1, 2, 3

}

4,Stack<T>

也就是棧,原理是后進后出,位于System.Collections.Generic命名空間下,常用于 函數調用棧,表達式求值等場景

(1)創建棧

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

(2)常用方法和屬性

①Push(value):將元素壓入棧頂

②Pop():移除并返回棧頂的元素,如果棧頂為空,報錯

③Peek():返回棧頂元素,但不移除它,如果棧為空,報錯

④Count:獲取棧中當前元素的數量

⑤clear():移除棧中所有元素

⑥Contains(value):檢查棧中是否包含指定的元素

⑦ToArray():將棧的元素復制到一個新數組中

(3)遍歷棧

通過foreach遍歷棧

例:

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

stack.Push(1);

stack.Push(2);

stack.Push(3);

foreach (var item in stack)

{

????Console.WriteLine(item); ?// 輸出:3, 2, 1

}

5,HashSet<T>

HashSet是一個基于哈希表的集合類,它存儲不重復的元素,位于System.Collections.Generic命名空間下,常用于需要快速查找和去重的元素

HashSet中的元素的是唯一的,不能有重復的元素,如果嘗試添加重復元素將會失敗,同時HashSet中的元素沒有特定的順序,因此它不會像List一樣可以按索引訪問元素,不過由于哈希表的實現,HashSet提供了非常快的查找、添加和刪除操作(時間復雜度通常為O(1))

(1)創建HashSet

HashSet<T> set = new HashSet<T>();

(2)常用方法

①Add(value):向集合中添加元素,如果元素已經存在,返回false,添加成功, 返回true

②Remove(value):從集合中刪除指定的元素,如果元素不存在,返回false, 刪除成功則返回true

③Contains(value):檢查集合中是否包含指定的元素

④Count:獲取集合中的元素的數量

⑤clear():移除集合中的所有元素

⑥UnionWith(HashSet other):用另一個集合中元素更新當前集合,形成并集, 集合中將包含兩個集合中的所有元素,但不重復

例:

HashSet<int> set1 = new HashSet<int> { 1, 2, 3 };

HashSet<int> set2 = new HashSet<int> { 3, 4, 5 };

set1.UnionWith(set2); ?// set1 變為 { 1, 2, 3, 4, 5 }

⑦IntersectWith(HashSet other):用另一個集合中的元素更新當前集合,形成交集

⑧ExceptWith(HashSet other):從當前集合中刪除在另一個集合中存在的元素, 形成差集

例:

HashSet<int> set1 = new HashSet<int> { 1, 2, 3 };

HashSet<int> set2 = new HashSet<int> { 3, 4, 5 };

set1.ExceptWith(set2); ?// set1 變為 { 1, 2 }

(3)遍歷HashSet

HashSet<T>是無序集合,因此遍歷時元素的順序不可預測,可以使用foreach 循環遍歷

例:

HashSet<int> set = new HashSet<int> { 1, 2, 3, 4, 5 };

foreach (var item in set)

{

????Console.WriteLine(item); ?// 輸出:1, 2, 3, 4, 5(順序不可預測)

}

6,SortedList<key, value>

SortedList也是基于鍵值對的集合,在存儲鍵值對時會自動按鍵排序,位于 System.Collections.Generic命名空間下

(1)SortedList的基本特性

①自動排序:根據鍵的順序自動排序,可以是升序或自定義的排序方式(如果 提供了比較器)

②鍵唯一:每個鍵都是唯一的,不能重復

(2)常用方法和屬性

①Add(key,value):向SortedList中添加鍵值對

②Remove(key):根據鍵刪除指定的鍵值對

③ContainsKey(key):判斷是否包含指定的鍵

④IndexOfKey(key):獲取指定鍵的位置,如果鍵不存在,返回-1

⑤Count():獲取SortedList中的元素數量

⑥clear():清空所有鍵值對

(3)遍歷SortedList

通過foreach直接循環遍歷

例:

SortedList<int, string> sortedList = new SortedList<int, string>

{

????{ 3, "Three" },

????{ 1, "One" },

????{ 2, "Two" }

};

foreach (var kvp in sortedList)

{

????Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");

}

輸出:

Key: 1, Value: One

Key: 2, Value: Two

Key: 3, Value: Three

三,總結

以上就是所有的集合類型,推薦使用泛型類型的集合

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64837.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64837.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64837.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

記一次網閘部署經歷

1.在成功獲取某大廠偉思網閘設備&#xff0c;并與客戶就現有網絡架構&#xff08;包括防火墻與交換機&#xff09;進行了詳盡的溝通與評估后&#xff0c;我們團隊精心構思并提出了一個創新的實施方案——采用透明網橋模式。這一模式以其獨特的優勢&#xff0c;即無需對客戶現有…

SpringCloud(一)--SpringCloud簡介

一. 引言 ? 在微服務架構日益盛行的今天&#xff0c;Spring Cloud憑借其簡單易用、功能強大的特性&#xff0c;成為了眾多開發者的首選。本文僅為學習所用&#xff0c;聯系侵刪。 二. SpringCloud概述 2.1 定義 ? Spring Cloud是一系列框架的有序集合&#xff0c;它巧妙地…

SQLALchemy如何將SQL語句編譯為特定數據庫方言

最近在一個使用fastapitortoise-orm的項目中&#xff0c;需要將orm的語句編譯成特定數據庫方言&#xff0c;但是查詢了官方文檔及一些資料卻找不到合適的方法論&#x1f614;&#xff0c;于是乎我就把目光放到了sqlalchemy身上&#xff0c;東找西找給我找著了。話不多說&#x…

廬山派K230學習日記2 MicroPython基礎

MicroPython文檔&#xff1a; https://docs.micropython.org/ MicroPython是編程語言 Python3 的精簡高效實現&#xff0c;語法和 Python3 保持一致&#xff0c;但只實現了 Python 標準庫的一小部分&#xff0c;并且經過優化&#xff0c;適用于物聯網 (IoT)、消費電子和嵌入式…

《計算機組成及匯編語言原理》閱讀筆記:p177-p177

《計算機組成及匯編語言原理》學習第 13 天&#xff0c;p177-p177 總結&#xff0c;總計 1 頁。 一、技術總結 1.real mode A programming model where the program has access to the entire capability of the machine, bypassing security and memory management. Useful…

2000-2020年各省財政一般預算支出面板數據

2000-2020年各省財政一般預算支出面板數據 1、時間&#xff1a;2000-2020年 2、來源&#xff1a;國家統計局 3、指標&#xff1a;年份、省份、地方財政一般預算支出 4、范圍&#xff1a;31省 指標解釋&#xff1a;地方財政一般預算支出?是指地方ZF根據預算安排&#xff0…

python小項目:給復制出來的段落前添加星號

給復制出來的段落前添加星號 最終效果二、實現步驟2.1 編寫python腳本2.2 批處理腳本2.3 運行腳本 三、用到知識3.1 pyperclip 模塊 最終效果 說明&#xff1a;復制四段內容&#xff08;段落實際不做限制&#xff09;&#xff0c;在windows終端輸入 bulletPointAdder&#xff0…

【LeetCode Hot100 二分查找】搜索插入位置、搜索二維矩陣、搜索旋轉排序數組、尋找兩個正序數組的中位數

二分查找 搜索插入位置搜索二維矩陣在排序數組中查找元素的第一個和最后一個位置尋找旋轉排序數組中的最小值搜索旋轉排序數組尋找兩個正序數組的中位數&#xff08;hard&#xff09; 搜索插入位置 給定一個排序數組和一個目標值&#xff0c;在數組中找到目標值&#xff0c;并…

24.Java 新特性擴展(重復注解、類型注解)

一、重復注解 1、基本介紹 自從 JDK 5 引入注解以來&#xff0c;注解的使用開始流行&#xff0c;在各個框架中被廣泛使用 不過注解有一個很大的限制&#xff0c;在同一個地方不能多次使用同一個注解 JDK 8 引入了重復注解的概念 2、具體實現 &#xff08;1&#xff09;自…

后端java開發路由接口并部署服務器(四)

一、安裝IntelliJ IDEA&#xff0c;安裝包下載 1、官網下載 2、網盤資源 安裝包下載完成后進行傻瓜式下一步安裝就可以了 打開IntelliJ IDEA&#xff0c;輸入網盤資源文件內容 三、漢化處理 插件搜索chinese&#xff0c;就會找到相應的插件安裝重啟軟件即可 四、新建后端j…

Vue.js 表單驗證實戰:一個簡單的登錄頁面

修改日期備注2025.1.2初版 一、前言 Vue.js 學習第一天——學會一個帶有簡單表單驗證的登錄頁面。通過這個項目&#xff0c;會對 Vue.js 的核心概念有了更深入的理解&#xff0c;加深掌握如何運用 Vue 的一些強大特性來實現動態交互和數據處理。 二、項目的基本結構 首先&a…

MySQL 鎖那些事

Q1 : MySQL有哪些鎖,功能是什么,如何項目中使用?Q2 : 行鎖是如何實現的?什么情況下會使用行鎖?Q3 : 四種事務隔離形式的行鎖有什么不一樣?讀未提交讀提交可重復讀串行 Q4 : MySQL 的讀寫都是怎樣加鎖的?Q5 : 需要注意什么? Q1 : MySQL有哪些鎖,功能是什么,如何項目中使用…

國產文本編輯器EverEdit - 批量轉碼轉換行符

1 批量轉碼&轉換行符 1.1 應用場景 如果用戶批量在Windows編輯文件&#xff0c;要上傳到異構系統&#xff0c;如&#xff1a;Linux&#xff0c;則需要批量轉換編碼和換行符&#xff0c;此時可以使用EverEdit的批量轉碼功能。 1.2 使用方法 選擇主菜單文檔 -> 批量轉碼…

Java實現下載excel模板,并實現自定義下拉框

GetMapping("excel/download")ApiOperation(value "模板下載")public void getUserRecordTemplate(HttpServletResponse response, HttpServletRequest request) throws IOException {OutputStream outputStream response.getOutputStream();InputStream…

成立一家無人機培訓機構需要哪些基礎配置

成立一家無人機培訓機構&#xff0c;需要一系列基礎配置來確保教學質量、學員安全以及機構的正常運營。以下是根據公開發布的信息整理出的關鍵基礎配置&#xff1a; 一、場地配置 1. 飛行場&#xff1a;提供一個安全、寬敞的室外飛行環境&#xff0c;面積最好大于三千平米&…

交換機性能詳解

1. 背板帶寬 只有模塊化交換機&#xff08;擁有可擴展插槽&#xff0c;可靈活改變端口數量&#xff09;才有這個概念&#xff0c;固定端換機是沒有這個概念的。并且固定端換機的背板容量和交換容量大小是相等的。 背板帶寬是交換機的總數據處理能力&#xff0c;由硬件架構設…

讀“將計算性能調高到極致的基點秘訣”的嘗試

看到一篇文章&#xff0c;說最近閱讀LAMMPS源碼&#xff0c;悟出了很多道理。在計算性能優化這塊&#xff0c;源代碼作者很多寫法我最初不以為意&#xff0c;后來發現是作者有意為之&#xff0c;就是為了把計算性能優化到極致。做計算仿真軟件&#xff0c;也特別需要注意這些吧…

Gitea代碼倉服務搭建

特點與優勢 輕量級:Gitea是一個輕量級的Git服務,提供了快速、穩定的代碼托管和協作開發環境。它資源占用低,適合在資源受限的環境中運行。易于安裝和部署:Gitea提供了簡單易用的安裝和部署方式,支持多種安裝方式,包括二進制文件、Docker容器等,并提供了詳細的文檔和配置…

leetcode hot 小偷

class Solution(object):def rob(self, nums):""":type nums: List[int]:rtype: int"""# 使用動態規劃&#xff0c;把之前的給保存起來ans[0,nums[-1]]for i in range(1,len(nums)):ans.append(max(ans[-1],ans[-2]nums[-1*i-1]))return ans[-1]…

端口被占用

端口8080被占用 哈哈哈&#xff0c;我是因為后端項目跑錯了&#xff0c;兩個項目后端名稱太像了&#xff1b; &#xff08;1&#xff09;netstat -aon | findstr 8080&#xff0c;找到占用8080端口的進程號&#xff0c;獲取對應的進程號pid&#xff1b; &#xff08;2&#…