🤝 免罵聲明:
- 本文
集合創建操作經本蜀黎實戰整理,旨在提供快速參考指南📝- 因各語言版本迭代及不同系統
環境差異,偶爾可能出現整理不全面之處,實屬正常✅- 理性討論歡迎,無憑據攻擊將依據平台規則處理,並可能觸發內容自動備份傳播機制🙏!
- 若遇具體問題,請帶圖評論區留言,本蜀黎必拔碼相助🤝
※ 温馨提示
- 若本內容
不慎觸及某些利益,請理性溝通,但刪稿免談,內容去留僅由平台規則決定。 - 若是學生/自學黨,歡迎白嫖,記得轉發給和你一樣在這條路上同行的夥伴——🔁
- 知識不該被壟斷,而該成為照亮彼此前行的燈。
🌿【虎山CTO·藥材使用警示】
- 🍀是藥
三分毒,代碼亦如方! - ❌文中所涉藥材均為技術隱喻,嚴禁實際配伍使用。
- 🙏真實用藥請遵醫囑,亂用者——
- 系統崩壞事小,氣血逆流事大!⚠️
📚 系列文章預告:
- 近期內容將聚焦編程基礎構建,以
「原創知識矩陣」形式系統梳理核心概念。每篇如連續劇集般環環相扣,建議按順序學習——知識點一鍋端,療效更持久!🔥
🧙♂️【場景還原:集合創建特訓】
⚡ 雷影老闆(一拳砸碎鍵盤):
- 「🏆今天學
集合創建——可變集合如調兵符,不可變集合如生死簿!學不會的,通宵手寫《哈希表封印術》1000遍!」
🦊 鳴人(對着藥材配伍表抓狂):
- 「伊魯卡老師!為什麼Python用
{}創建集合,Java要new HashSet()?Go還要用map模擬?我的藥方要亂套了!😫」
👨🏫 伊魯卡(粉筆頭精準命中後腦):
- 「鳴人!集合操作如佈陣——🧬
{}=快速結印,set()=精細施法,frozenset()=永久封印🥓- 亂用可變集合=陣法失控,君臣錯位!🌿」
🐯 卡卡西(從《親熱天堂》後抬眼):
- 「🎰嘖...連基礎集合都不會創建,以後怎麼學影分身·緩存去重之術?」
🧘【扎馬步·集合創建心法】
📚 三大創建方式如陣法根基:
- 字面量創建 → 快速結印(
{}/Set())🥇 - 構造函數創建 → 精細施法(
set()/new HashSet())🥈 - 不可變集合 → 永久封印(
frozenset()/unmodifiableSet())🥉
🔍 創建要訣如陣法禁忌:
- 判空宜謹慎 → 佈陣先清場地(防雜質入侵)🍒
- 順序不可靠 → 陣法變化無常(防順序依賴)🩸
- 類型需統一 → 兵種整齊劃一(防類型混亂)🧬
🌿 虎山CTO心法要訣:
- 快速結印:
{}最便捷,但要注意空集合陷阱🥇 - 精細施法:
set()最靈活,可轉化各種迭代器🥈 - 永久封印:
frozenset()最安全,防篡改如鐵壁🥉
🐍【Python篇·藥方快速佈陣法】
# 快速結印 → 藥方即時佈陣
消化藥 = {"焦山楂","焦神曲","焦麥芽"} # 焦三仙陣法
# 精細施法 → 藥材精細調配
字符集 = set("鮮山楂") # 拆字佈陣
數字集 = set([1.333, 2.222, 1.555]) # 數列轉化
# 永久封印 → 禁忌藥方鎖定
死亡筆記 = frozenset(["砒霜","斷腸草"]) # 不可修改的禁忌集
💣【JavaScript篇·丹爐即時結陣術】
// 快速結印 → 丹爐即時結陣
const 消化藥 = new Set(["焦山楂","焦神曲","焦麥芽"]);
// 精細施法 → 丹藥成分解析
const 字符集 = new Set("鮮山楂");
const 數字集 = new Set([1.333, 2.222, 1.555]);
// 永久封印 → 丹方傳承鎖定(手動實現)
const 死亡筆記 = Object.freeze(new Set(["砒霜","斷腸草"]));
⚡【Go篇·倉儲貨架佈陣術】
// 快速結印 → 貨架即時分類
消化藥 := map[string]bool{"焦山楂":true, "焦神曲":true, "焦麥芽":true}
// 精細施法 → 商品編碼解析
字符集 := make(map[rune]bool)
for _, c := range "鮮山楂" {
字符集[c] = true
}
// 永久封印 → 危險品區鎖定(返回只讀map)
func 獲取禁忌集() map[string]bool {
return map[string]bool{"砒霜":true, "斷腸草":true}
}
☕【Java篇·ERP權限佈陣術】
// 快速結印 → 權限即時分配
Set<String> 消化藥 = new HashSet<>(Arrays.asList("焦山楂","焦神曲","焦麥芽"));
// 精細施法 → 用户權限解析
Set<Character> 字符集 = new HashSet<>();
for (char c : "鮮山楂".toCharArray()) {
字符集.add(c);
}
// 永久封印 → 系統權限鎖定
Set<String> 死亡筆記 = Collections.unmodifiableSet(
new HashSet<>(Arrays.asList("砒霜","斷腸草"))
);
| 操作類型 | Python | JavaScript | Go | Java |
|---|---|---|---|---|
| 字面量創建 | {1,2,3} |
new Set([1,2,3]) |
map[T]bool{1:true} |
Set.of(1,2,3) |
| 構造函數創建 | set(iterable) |
new Set(iterable) |
make(map[T]bool) |
new HashSet<>(coll) |
| 空集合創建 | set() |
new Set() |
make(map[T]bool) |
new HashSet<>() |
| 不可變集合 | frozenset() |
Object.freeze(new Set()) |
返回只讀map | Collections.unmodifiableSet() |
| 字符拆解 | set("abc") |
new Set("abc") |
遍歷字符串 | 遍歷char數組 |
| 特點説明 | 內置支持,語法簡潔 | 原生Set對象,API豐富 | 用map模擬,需手動管理 | 類型安全,功能完善 |
⚠️【避坑指南·創建界的"陣法反噬"】
🐍 Python:空集合的陷阱
# 💥 錯誤:空大括號創建的是字典,不是集合
空集合 = {} # 這是字典!
print(type(空集合)) # <class 'dict'>
# ✅ 正確:用set()創建空集合
空集合 = set()
print(type(空集合)) # <class 'set'>
💣 JavaScript:Set的數組轉換
// 💥 注意:Set構造參數是數組,不是多個參數
const 錯誤創建 = new Set("焦山楂", "焦神曲"); // 錯誤!只取第一個參數
const 正確創建 = new Set(["焦山楂", "焦神曲"]); // 正確!傳入數組
⚡ Go:map模擬的侷限性
// 💥 Go沒有內置集合,用map模擬有些不便
集合 := map[string]bool{"A": true, "B": true}
// ✅ 需要輔助函數來獲取鍵列表
func 獲取集合元素(集合 map[string]bool) []string {
元素 := make([]string, 0, len(集合))
for k := range 集合 {
元素 = append(元素, k)
}
return 元素
}
☕ Java:不可變集合的注意事項
// 💥 注意:unmodifiableSet是視圖,原集合修改會影響它
Set<String> 原集合 = new HashSet<>(Arrays.asList("A", "B"));
Set<String> 不可變集合 = Collections.unmodifiableSet(原集合);
原集合.add("C"); // 💥 不可變集合也會被修改!
// ✅ 正確:先複製再創建不可變集合
Set<String> 不可變集合 = Collections.unmodifiableSet(
new HashSet<>(Arrays.asList("A", "B")) // 創建新集合
);
以下是本蜀黎整理源碼和截圖⏬
1.Python源碼⏬
# ==================== 財務集合模塊 ====================
# 可變科目集:資產負債表的動態黑名單 📜
# 初始化空集合:財務部的空白逮捕令 🚨
# 凍結科目集:税務局的不可撼動聖旨 🏛️
# ⚠️ERP_冷溪虎山:篡改凍結集觸發審計核彈
print("⚖️⚖️⚖️⚖️⚖️⚖️以下是大括號{}創建集合")
hdj = {"焦山楂","焦神曲","焦麥芽"} #消化藥 焦三仙 字符集合 隨機順序
number = {3,6,5,4,2,1} #自動排序
print(hdj)
print(number)
print("\n","⚖️⚖️⚖️⚖️⚖️⚖️以下是set()創建集合")
maybush_set = set("鮮山楂") #隨機順序
number_set = set([1.333,2.222,1.555,1.777,1.111]) #{1.333, 2.222, 1.777, 1.111, 1.555}
print(maybush_set)
print(number_set)
print("\n","⚖️⚖️⚖️⚖️⚖️⚖️以下是生成不可變集合")
print(frozenset()) #生成空不可變集合
print(frozenset("number")) #隨機順序
print(frozenset(range(10))) #數字序列
2.Nodejs源碼⏬
// ==================== 中藥集合模塊 ====================
// 可變配伍組:君臣佐使的動態調兵符 🪄
// 空藥方集合:太上老君的空白丹書 📄
// 凍結禁忌集:女媧石上刻的生死簿 ☠️
// ⚠️虎山老藥師:修改禁忌集會引天劫
console.log("⚖️⚖️⚖️⚖️⚖️⚖️ 以下是大括號{}創建集合");
// JavaScript沒有真正的集合類型,使用Set對象
const hdj = new Set(["焦山楂", "焦神曲", "焦麥芽"]); // 消化藥 焦三仙 字符集合 順序不保證
const number = new Set([3, 6, 5, 4, 2, 1]); // 自動排序(數字會按升序排列)
console.log([...hdj]); // 轉換為數組打印
console.log([...number]); // 轉換為數組打印
console.log("\n","⚖️⚖️⚖️⚖️⚖️⚖️ 以下是Set()創建集合");
const maybushSet = new Set("鮮山楂"); // 隨機順序
const numberSet = new Set([1.333, 2.222, 1.555, 1.777, 1.111]); // 順序不保證
console.log([...maybushSet]);
console.log([...numberSet]);
console.log("\n","⚖️⚖️⚖️⚖️⚖️⚖️ 以下是生成不可變集合");
// JavaScript沒有內置的不可變集合,可以使用Object.freeze或自定義實現
console.log(new Set()); // 空集合
console.log(new Set("number")); // 隨機順序
console.log(new Set([...Array(10).keys()])); // 數字序列 0-9
3.Go源碼⏬
package main
import (
"fmt"
"sort"
)
// ==================== 倉儲集合模塊 ====================
// 可變貨品組:智能貨架的動態屏蔽名單 📵
// 空集合初始化:倉庫貓的空白逮捕令 🐾
// 凍結區位集:建築圖紙的鋼印座標 🏗️
// ⚠️冷溪物流:改動凍結集會導致貨架塌方
func main() {
fmt.Println("⚖️⚖️⚖️⚖️⚖️⚖️以下是大括號{}創建集合")
// Go沒有內置的集合類型,使用map來模擬
hdj := map[string]bool{"焦山楂": true, "焦神曲": true, "焦麥芽": true} // 消化藥 焦三仙 字符集合 順序不保證
number := map[int]bool{3: true, 6: true, 5: true, 4: true, 2: true, 1: true} // 順序不保證
fmt.Println(hdj) // 手動打印,因為map無序
fmt.Println(number) // 手動打印,因為map無序
fmt.Println("\n", "⚖️⚖️⚖️⚖️⚖️⚖️以下是set()創建集合")
maybushSet := make(map[rune]bool)
for _, c := range "鮮山楂" {
maybushSet[c] = true
} // 隨機順序
numberSet := make(map[float64]bool)
numbers := []float64{1.333, 2.222, 1.555, 1.777, 1.111}
for _, num := range numbers {
numberSet[num] = true
} // 順序不保證
fmt.Println("鮮山楂的字符:", getKeys(maybushSet))
fmt.Println("數字集合:", getKeysSorted(numberSet))
fmt.Println("\n", "⚖️⚖️⚖️⚖️⚖️⚖️以下是生成不可變集合")
// Go沒有內置的不可變集合,可以返回不可修改的map或使用自定義類型
emptySet := make(map[interface{}]bool)
fmt.Println("空集合")
fmt.Println("number的字符:", emptySet) // 實際上應該返回一個不可變的集合,這裏簡化處理
numberRange := make(map[int]bool)
for i := 0; i < 10; i++ {
numberRange[i] = true
}
fmt.Println("數字序列 0-9:", getKeysSortedInt(numberRange))
}
// 輔助函數:獲取map的鍵
func getKeys(m map[rune]bool) []rune {
keys := make([]rune, 0, len(m))
for k := range m {
keys = append(keys, k)
}
return keys
}
// 輔助函數:獲取map的鍵並排序
func getKeysSorted(m map[float64]bool) []float64 {
keys := make([]float64, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Float64s(keys)
return keys
}
// 輔助函數:獲取map的鍵並排序(整數)
func getKeysSortedInt(m map[int]bool) []int {
keys := make([]int, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Ints(keys)
return keys
}
4.Java源碼⏬
import java.util.*;
// ==================== ERP集合模塊 ====================
// 可變權限組:系統的動態防火牆 🔥
// 空集合創建:DBA的格式化聖旨 📑
// 凍結配置集:刻在BIOS裏的摩西十誡 ✝️
// ⚠️ERP老兵_冷溪虎山:修改凍結集等於自盡
class main29 {
public static void main(String[] args) {
System.out.println("⚖️⚖️⚖️⚖️⚖️⚖️以下是大括號{}創建集合");
// Java使用Set接口的實現類,如HashSet
Set<String> hdj = new HashSet<>(Arrays.asList("焦山楂", "焦神曲", "焦麥芽")); // 消化藥 焦三仙 字符集合 順序不保證
Set<Integer> number = new TreeSet<>(Arrays.asList(3, 6, 5, 4, 2, 1)); // TreeSet會自動排序
System.out.println(hdj);
System.out.println(number);
System.out.println("\n⚖️⚖️⚖️⚖️⚖️⚖️以下是Set()創建集合");
Set<Character> maybushSet = new HashSet<>();
for (char c : "鮮山楂".toCharArray()) {
maybushSet.add(c);
} // 隨機順序
Set<Double> numberSet = new HashSet<>(Arrays.asList(1.333, 2.222, 1.555, 1.777, 1.111)); // 順序不保證
System.out.println(maybushSet);
System.out.println(numberSet);
System.out.println("\n⚖️⚖️⚖️⚖️⚖️⚖️以下是生成不可變集合");
// Java使用Collections.unmodifiableSet創建不可變集合
System.out.println(Collections.unmodifiableSet(new HashSet<>())); // 空集合
System.out.println(Collections.unmodifiableSet(new HashSet<>(Arrays.asList('n', 'u', 'm', 'b', 'e', 'r')))); // 隨機順序
Set<Integer> numberRange = new HashSet<>();
for (int i = 0; i < 10; i++) {
numberRange.add(i);
}
System.out.println(Collections.unmodifiableSet(numberRange)); // 數字序列 0-9
}
}
源碼分享結束⏫
📜【結局:全員陣法初成】
⚡ 雷影老闆(看着整齊的集合創建瞳孔地震):
- 「🏆這基礎打得比我的雷遁·麒麟還穩!但必須掌握四語言創建差異,否則獎金扣去優化系統架構!」
🌸 雛田(小聲提醒鳴人):
- 「鳴人...Java的
Collections.unmodifiableSet()是防禦性拷貝...就像給陣法加結界...🔒」
🦊 鳴人(舉着拉麪碗歡呼):
- 「哈哈哈!原來
frozenset()就是給禁忌藥方上鎖!佐助——來比誰先創建100個不重樣集合!🍜」
🐯 卡卡西(合上《親熱天堂》):
- 「嗯...總算有點忍者的樣子了。下次教你們用集合實現通靈術·數據去重...🎯」
💥 佐助(寫輪眼微閃):
- 「哼...吊車尾的,等你能用Go實現線程安全集合再説吧。」
🧪【四語言集合創建心法口訣】
Python:
{}快速結印,set()精細施法,frozenset()永久封印🏆
JavaScript:
new Set()丹爐結陣,Object.freeze()天道封印,數組參數要牢記🥇
Go:
map模擬佈陣,手動管理鍵值,只讀返回防篡改🥈
Java:
HashSet權限分配,TreeSet自動排序,unmodifiableSet系統鎖定🥉
🔥 記憶口訣:
- 創建集合如佈陣,快速精細兩相宜🥇
- 可變不可變,安全效率要權衡🥈
- 四法通曉陣法成,數據去重如反掌!🥉
🔖虎山CTO三道護體符
因果符:
- 🚀我每被惡意舉報一次,就加更一篇乾貨——感謝黑粉為我提供創作燃料。
鏡像符:
- 📌若遭攻擊(檢測到行業焦慮值上升),建議某些機構停止這種“DDoS攻擊”,將資源用於提升自身課程服務的“帶寬”與“質量”。
重生符:
- 💪本人是經歷過生死重啓的野生程序猿,系統兼容性極強——你們那點小打小鬧,連個 warning 都觸發不了。
⚠️ 免責聲明(附因果律警告)
本代碼已注入中醫玄學能量,請謹慎使用:
-
✅ 允許白嫖,但白嫖不點贊可能導致:
- 下次面試官恰好問到這個算法
- 鍵盤自動打出
//這裏感謝冷溪虎山CTO - 奶茶精準灑在剛寫好的代碼上
-
✅ 允許商用轉發,但商用不註明出處可能觸發:
- 系統類型混亂自動轉型
- 數據庫莫名存儲"君臣佐使"字段
-
✅ 允許吐槽,但吐槽不帶改進建議可能引發:
- 終生與老闆N連鞭相愛相殺
🚀 現在立即行動:
- 點贊 → 吸收本篇算法精華+怪蜀黎腦洞思維
- 收藏 → 避免日後求醫無門
- 關注 → 接收更多「中醫+代碼」腦洞
- 評論區留言 → 領取你的專屬「算法藥方」
⚠️ 友情提示:
- 本文內容過於硬核,建議點贊收藏轉發三連,避免小編
心情波動導致文章神秘消失! - 畢竟小編今天可能愛答不理,明天可能高攀不起——
-
但你的收藏夾,永遠是你最穩的知識備份!
🐶💻 (小聲説:關我小黑屋?不存在的,備份早已同步GitHub/公眾號/網盤!)
📚 往期爆文推薦,VIP輪換解鎖:
📖Python/JS/Go/Java四語言同步學習,跨語言系列上線(別在糾結學什麼單語言了)
🔍 沒看過前傳?快補課!
前1-24篇請移步至"PY-JS-GO-JAVA基礎進階學習系列"合集中閲讀
- Python/JS/Go/Java同步學習(第二十八篇)四語言“字典的複製和更新“對照表: 雷影“老闆“發飆要求員工下班留校培訓風暴(附源碼/截圖/參數表/避坑指南)
- Python/JS/Go/Java同步學習(第二十七篇)四語言“字典獲取內容和刪除“對照表: 雷影“老闆“發飆要求員工下班留校培訓風暴(附源碼/截圖/參數表/避坑指南)
- Python/JS/Go/Java同步學習(第二十六篇)四語言“字典轉換2和遍歷“對照表: 雷影“老闆“發飆要求員工下班留校培訓風暴(附源碼/截圖/參數表/避坑指南)
- Python/JS/Go/Java同步學習(第二十五篇)四語言“字典創建轉換“對照表: 雷影“老闆“發飆要求員工下班留校培訓風暴(附源碼/截圖/參數表/避坑指南)