Java八股文——集合「Set篇」

Set集合有什么特點?如何實現key無重復的?

面試官您好,Set 集合是 Java 集合框架中的一個重要接口,它繼承自 Collection 接口,其最顯著的特點和設計目標就是存儲一組不重復的元素

一、Set集合的主要特點:

  1. 元素唯一性 (Uniqueness)
    • 這是 Set 最核心的特點。Set 中不允許包含重復的元素。如果你嘗試向一個 Set 中添加一個已經存在的元素(根據 equals() 方法判斷為相同),那么添加操作通常會失敗(或者說,不會改變 Set 的內容),并且 add() 方法會返回 false
    • 這種唯一性是基于對象的 equals() 方法來判斷的。
  2. 無序性 (Unordered) 或特定順序 (Ordered)
    • Set 接口本身并不保證元素的任何特定順序。
    • 具體的 Set 實現類會決定元素的存儲順序:
      • HashSet:是最常用的 Set 實現,它不保證元素的順序,元素的存儲和迭代順序可能與插入順序不同,并且可能會隨時間變化(例如,在擴容后)。
      • LinkedHashSet:它繼承自 HashSet,但額外維護了一個雙向鏈表來記錄元素的插入順序。因此,LinkedHashSet保證元素按照插入順序進行迭代
      • TreeSet:它實現了 SortedSet 接口,能夠將元素保持在排序狀態。元素可以按照其自然順序(如果元素實現了 Comparable 接口)或者根據創建 TreeSet 時提供的 Comparator 進行排序。
  3. 允許null元素
    • 大多數 Set 實現(如 HashSetLinkedHashSet允許包含一個null元素。因為 null 也是唯一的。
    • TreeSet 默認情況下不允許 null 元素(除非其 Comparator 特別處理了 null 的比較),因為 null 無法進行自然的比較。

二、Set如何實現元素(或稱之為Key)無重復的原理:

Set 接口的實現類通常是基于對應的Map實現來保證元素唯一性的。它們巧妙地利用了 Map 中鍵(Key)的唯一性特性。

  • HashSet的實現原理
    • HashSet 內部實際上是持有一個HashMap實例
    • 當你向 HashSetadd(E e) 一個元素時,這個元素 e 實際上是被當作 HashMap鍵(Key) 來存儲的。
    • HashMap 的值(Value)部分對于 HashSet 來說并不重要,所以 HashSet 內部會使用一個固定的、虛擬的Object對象(名為PRESENT)作為所有鍵對應的值
// HashSet 源碼片段 (示意)
private transient HashMap<E,Object> map;
private static final Object PRESENT = new Object();public boolean add(E e) {return map.put(e, PRESENT) == null;
}
  • 因此,HashSet 添加元素的邏輯就轉換為了向內部 HashMapput(element, PRESENT)
    • HashMapput 操作時,會遵循以下步驟來確保鍵的唯一性:
      1. 計算hashCode():首先計算要添加的元素(作為 Key)的 hashCode() 值,以確定其在 HashMap 內部數組中的存儲位置(哈希桶)。
      2. 檢查沖突并調用equals()
        • 如果哈希桶為空,直接存入。
        • 如果哈希桶不為空(發生哈希沖突),則會遍歷該桶中的鏈表或紅黑樹,對每個已存在的鍵,使用要添加元素的 equals() 方法進行比較。
        • 如果 equals() 方法返回 true,說明找到了一個與待添加元素相等的鍵,HashMap 不會再次插入這個鍵(而是可能會更新其值,但對于 HashSet,值是固定的 PRESENT,所以實際上是不做任何改變)。
        • 如果遍歷完整個桶都沒有找到 equals() 相等的鍵,則將新元素(作為鍵)添加到鏈表或紅黑樹中。
    • 由于 HashMap 保證了其鍵的唯一性,所以依賴于 HashMapHashSet 也就自然地保證了其元素的唯一性。
  • LinkedHashSet的實現原理
    • HashSet 類似,LinkedHashSet 內部持有的是一個 LinkedHashMap實例
    • LinkedHashMapHashMap 的基礎上額外維護了一個雙向鏈表來記錄鍵的插入順序。因此,LinkedHashSet 能夠保證元素的迭代順序與插入順序一致,同時通過 LinkedHashMap 鍵的唯一性來保證元素的唯一性。
  • TreeSet的實現原理
    • TreeSet 內部持有的是一個 TreeMap實例(或者更準確地說,是一個 NavigableMap,通常是 TreeMap)。
    • 元素被作為 TreeMap 的鍵存儲,值同樣是虛擬的 PRESENT 對象。
    • TreeMap 是基于紅黑樹實現的,它通過元素的自然順序(Comparable)或自定義比較器(Comparator)來對鍵進行排序和比較。當添加元素時,TreeMap 會根據比較結果來判斷元素是否已存在(比較結果為0則認為已存在),從而保證元素的唯一性,并維持元素的排序狀態。

總結來說,Set集合通過其內部依賴的Map實現(如HashMap,LinkedHashMap,TreeMap)來巧妙地實現了元素的唯一性。核心機制是:將待添加的元素作為Map的鍵,利用Map在存儲鍵時會先通過hashCode()定位,再通過equals()(或compareTo()對于TreeSet) 精確判斷鍵是否重復的特性,來確保Set中不會出現重復元素。

有序的Set是什么?記錄插入順序的集合是什么?

面試官您好,關于 Java 中有序的 Set 集合以及能記錄插入順序的 Set 集合,主要涉及到以下兩種實現:

一、有序的Set(SortedSet / NavigableSet)

當提到“有序的 Set”,通常指的是元素在集合中按照某種比較規則(自然順序或自定義順序)保持排序狀態

  • 主要實現類:TreeSet
    • TreeSet 實現了 NavigableSet 接口,而 NavigableSet 又繼承了 SortedSet 接口。
    • 排序機制
      • TreeSet 的底層是基于紅黑樹 (Red-Black Tree) 實現的(內部實際上依賴一個 TreeMap)。
      • 它能保證元素在集合中始終處于排序狀態。排序規則可以是:
        1. 自然順序:如果存入 TreeSet 的元素實現了 java.lang.Comparable 接口,并且其 compareTo() 方法定義了元素間的自然比較順序(如數字的大小、字符串的字典序)。
        2. 自定義順序:如果在創建 TreeSet 時提供了一個 java.util.Comparator 對象,那么元素將按照這個比較器定義的規則進行排序。
    • 特點
      • 元素唯一(Set 的基本特性)。
      • 元素有序(按照定義的比較規則)。
      • 提供了豐富的導航方法(如 first(), last(), lower(), higher(), floor(), ceiling(), 以及獲取子集的方法),這些都得益于其有序性。
      • 查找、插入、刪除操作的時間復雜度通常是 O(log N)。
    • 注意TreeSet 默認情況下不允許存入 null 元素,因為 null 無法進行自然的比較。如果需要支持 null,必須提供一個能處理 nullComparator

二、記錄插入順序的Set

當提到“記錄插入順序的 Set”,指的是集合中的元素在迭代時,其順序與它們被添加到集合中的順序保持一致。

  • 主要實現類:LinkedHashSet
    • LinkedHashSet 繼承自 HashSet,并在其基礎上增加了一個機制來維護元素的插入順序。
    • 順序機制
      • LinkedHashSet 內部實際上依賴一個 LinkedHashMap
      • LinkedHashMapHashMap 的基礎上,額外維護了一個雙向鏈表。這個鏈表連接了所有存入的條目(在 LinkedHashSet 中即元素),并記錄了它們的插入順序。
    • 特點
      • 元素唯一(Set 的基本特性,由其內部 LinkedHashMap 的鍵唯一性保證)。
      • 迭代順序與插入順序一致。這是它與 HashSet(無序)和 TreeSet(按比較規則排序)的主要區別。
      • 查找、插入、刪除操作的平均時間復雜度與 HashSet 類似,通常是 O(1)(假設哈希函數分布良好),但由于維護鏈表的額外開銷,其性能常數因子會略大于 HashSet
      • 允許一個 null 元素。

總結對比:

特性TreeSetLinkedHashSetHashSet (作為參照)
元素唯一
順序性按比較規則排序(自然順序或自定義比較器)按插入順序無序
底層實現紅黑樹 (基于 TreeMap)哈希表 + 雙向鏈表 (基于 LinkedHashMap)哈希表 (基于 HashMap)
null支持默認不允許 (除非 Comparator 支持)允許一個 null允許一個 null
主要用途需要排序的唯一元素集合需要保持插入順序的唯一元素集合不需要特定順序的唯一元素集合

因此:

  • 如果您需要一個根據元素值本身進行排序Set,那么應該選擇 TreeSet
  • 如果您需要一個保持元素插入順序Set,那么應該選擇 LinkedHashSet
  • 如果您對順序沒有要求,只關心元素的唯一性和高效的存取,那么通常選擇 HashSet

LinkedHashSet 保證的是插入順序,而不是元素本身的自然排序。TreeSet 才保證元素本身的自然排序(或比較器排序)。

Comparable 和 Comparator 的區別

面試官您好,ComparableComparator 都是 Java 中用于對象比較和排序的核心接口,但它們在設計和使用上有著明確的區別:

一、Comparable接口

  1. 定義與來源
    • Comparable 接口位于 java.lang 包下。
    • 它只包含一個方法:int compareTo(T o)
  2. 設計意圖 (內比較器 / 自然排序)
    • Comparable 的設計意圖是讓一個類的對象自身具備可比較性。當一個類實現了 Comparable 接口,就意味著這個類的實例可以相互比較大小,它們擁有了所謂的“自然排序”順序。
    • 可以把它看作是對象的 “內比較器”或“默認比較規則”
  3. 使用方式
    • 類需要直接實現Comparable接口,并重寫 compareTo(T o) 方法來定義其比較邏輯。
    • compareTo(T o) 方法的返回值約定:
      • 如果當前對象 (this) 小于參數對象 o,返回負整數。
      • 如果當前對象 (this) 等于參數對象 o,返回零。
      • 如果當前對象 (this) 大于參數對象 o,返回正整數。
    • 一旦類實現了 Comparable,其對象就可以直接被一些排序工具使用,例如:
      • Collections.sort(List<T> list):如果 List 中的元素類型 T 實現了 Comparable,可以直接調用此方法進行排序。
      • Arrays.sort(T[] a):同理。
      • TreeSet<T>TreeMap<K,V>:如果元素/鍵 TK 實現了 Comparable,它們在存入這些集合時會自動按自然順序排序。
  4. 示例場景
    • String, Integer, Date 等 Java 內置的許多類都實現了 Comparable 接口,定義了它們各自的自然排序規則(如字符串按字典序,數字按大小)。
    • 如果我們有一個自定義的 Student 類,我們可能希望它默認按學號排序,那么 Student 類就可以實現 Comparable<Student> 并重寫 compareTo 方法比較學號。

二、Comparator接口

  1. 定義與來源
    • Comparator 接口位于 java.util 包下。
    • 它主要包含一個方法:int compare(T o1, T o2)。(Java 8 之后還增加了一些默認方法和靜態方法,如 thenComparing, comparingInt 等,用于構建更復雜的比較器)。
  2. 設計意圖 (外比較器 / 定制排序)
    • Comparator 的設計意圖是提供一種獨立于對象本身的比較邏輯。它允許我們為那些沒有實現 Comparable 接口的類定義排序規則,或者為已經實現了 Comparable 接口的類提供額外的、不同的排序方式
    • 可以把它看作是對象的 “外比較器”或“定制比較規則”。它像一個“裁判”,專門負責比較兩個對象。
  3. 使用方式
    • 創建一個單獨的類來實現Comparator<T>接口,并重寫 compare(T o1, T o2) 方法。
    • 或者,更常見的是使用匿名內部類Lambda 表達式(Java 8+) 來創建一個 Comparator 實例。
    • compare(T o1, T o2) 方法的返回值約定:
      • 如果 o1 小于 o2,返回負整數。
      • 如果 o1 等于 o2,返回零。
      • 如果 o1 大于 o2,返回正整數。
    • 使用 Comparator 時,通常需要將其作為參數傳遞給排序工具:
      • Collections.sort(List<T> list, Comparator<? super T> c)
      • Arrays.sort(T[] a, Comparator<? super T> c)
      • new TreeSet<T>(Comparator<? super T> comparator)
      • new TreeMap<K,V>(Comparator<? super K> comparator)
  4. 示例場景
    • 正如您提到的,如果我們有一個 Song 對象,它可能實現了 Comparable 按歌名排序。但我們有時又想按歌手名排序,或者按發行日期排序,這時就可以創建不同的 Comparator<Song> 實現來滿足這些不同的排序需求。
    • 對于第三方庫中的類,如果它們沒有實現 Comparable 或者其自然排序不符合我們的要求,我們就可以通過 Comparator 來定義自己的排序邏輯,而無需修改這些類的源碼。

三、總結與選擇:

特性Comparable (內比較器)Comparator (外比較器)
定義位置java.langjava.util
實現方式類自身實現接口單獨的比較器類實現接口,或 Lambda/匿名內部類
方法簽名int compareTo(T o)int compare(T o1, T o2)
主要作用定義對象的自然排序/默認排序規則定義對象的定制排序/多種排序規則
耦合性比較邏輯與類本身耦合比較邏輯與類解耦
靈活性一種排序規則可提供多種排序規則
使用場景當類有明確的、主要的“自然”比較方式時當需要多種排序方式,或無法修改類源碼,或排序邏輯與業務場景相關時

簡單來說:

  • 如果一個類有其主要的、通用的比較方式(“自然順序”),那么讓這個類實現 Comparable 接口。
  • 如果需要多種不同的排序方式,或者目標類無法修改(比如是第三方庫的類),或者排序邏輯與特定業務場景緊密相關而非對象的固有屬性,那么應該使用 Comparator

在實際開發中,兩者經常結合使用。例如,一個類可以實現 Comparable 定義其默認排序,同時我們也可以提供多個 Comparator 來滿足不同的定制化排序需求。

無序性和不可重復性的含義是什么

面試官您好,在討論 Java 集合(特別是像 HashSet 這樣的 Set 實現或 HashMap 的鍵集)時,我們經常提到“無序性”和“不可重復性”,它們的具體含義如下:

一、無序性 (Unordered)

  1. 核心含義
    • “無序性”指的是元素在集合中的存儲順序和迭代(遍歷)順序通常與它們的添加順序不一致,并且這種順序通常是不固定的,可能會因為集合內部狀態的變化(如擴容)而改變。
    • 正如您所指出的,無序性不等于隨機性 (Randomness)。隨機性意味著每次迭代的順序都可能是完全不可預測且不同的。而對于像 HashSet 這樣的集合,雖然迭代順序與插入順序無關,但在不發生結構性修改(如添加、刪除導致擴容)的情況下,對同一個 HashSet 實例多次迭代,通常會得到相同的元素序列。
  2. 原因 (主要針對基于哈希的集合,如HashSet,HashMap)
    • 無序性主要是由其底層數據結構和元素定位機制決定的。
    • 對于基于哈希表實現的集合(如 HashSet 內部依賴 HashMap),元素在底層數組中的存儲位置是根據元素的哈希碼 (hashCode()**)**計算得到的。
    • 哈希碼本身與元素的添加順序無關。不同的元素,即使添加順序相鄰,它們的哈希碼可能差異很大,從而被映射到底層數組的不同、不連續的位置。
    • 因此,當你迭代這樣一個集合時,你實際上是在按某種順序(可能是數組索引順序,加上處理哈希沖突的鏈表/樹的順序)訪問這些由哈希碼決定的存儲位置,這個順序自然就不是元素的插入順序。
  3. 需要區分的集合
    • HashSet:是典型的無序集合。
    • LinkedHashSet:它雖然是 Set,但通過內部維護一個雙向鏈表來記錄元素的插入順序,所以它是有序的(按插入順序)
    • TreeSet:它也不是無序的,而是按元素的自然順序或自定義比較器順序進行排序的。

二、不可重復性 (No Duplicates / Uniqueness)

  1. 核心含義
    • “不可重復性”指的是集合中不能包含兩個或多個“相等”的元素
    • 這個“相等”的判斷標準是基于元素的 equals()方法。如果嘗試向集合中添加一個元素 e1,而集合中已經存在一個元素 e2 使得 e1.equals(e2) 返回 true,那么添加操作通常會失敗(或不改變集合內容),add() 方法會返回 false
  2. 實現機制 (主要針對Set實現)
    • 正如您所說,為了正確實現不可重復性,特別是對于自定義對象,必須同時正確地重寫其equals()方法和hashCode()方法
    • hashCode()的作用
      • 當向基于哈希的 Set(如 HashSet)中添加元素時,首先會計算元素的 hashCode() 來快速定位其在底層哈希表中的潛在存儲位置(哈希桶)。
    • equals()的作用
      • 如果通過 hashCode() 定位到的哈希桶中已經存在一個或多個元素(即發生哈希沖突),那么集合會逐個調用待添加元素的 equals() 方法與桶中已存在的元素進行比較。
      • 只有當 equals() 方法都返回 false 時,才認為新元素與桶中所有現有元素都不相等,此時才會將新元素添加到該桶中。如果任何一次 equals() 比較返回 true,則認為新元素是重復的,不予添加。
    • equals()hashCode()的協定
      • 如果 a.equals(b)true,那么 a.hashCode() 必須等于 b.hashCode()。這是保證 Set 能夠正確工作的關鍵。如果相等的對象哈希碼不同,它們可能會被放到不同的桶里,Set 就無法檢測到它們的重復。
  3. 示例
    • 如果 Set 中已有一個字符串 "hello",再嘗試添加另一個內容也是 "hello" 的字符串對象,由于 String 類正確實現了 equals() (比較內容) 和 hashCode() (基于內容計算),第二個 "hello" 會被認為是重復的,不會被添加。
    • 對于自定義的 Person 對象,如果我們希望只要 id 相同就認為是同一個人,那么 Person 類的 equals() 方法就應該只比較 id,并且其 hashCode() 方法也應該主要基于 id 來計算。

總結:

  • 無序性主要描述的是元素在集合中的存儲和迭代順序與添加順序無關,這是由底層哈希定位機制決定的,它不等于隨機
  • 不可重復性Set 的核心特性,意味著集合中不允許存在equals()判斷相等的多個元素,其正確實現依賴于元素類型正確重寫 equals()hashCode() 方法。

理解這兩點對于選擇和使用合適的集合類型非常重要。

比較 HashSet、LinkedHashSet 和 TreeSet 三者的異同

面試官您好,HashSet, LinkedHashSet, 和 TreeSet 都是 Java 集合框架中 Set 接口的重要實現類,它們在保證元素唯一性的基礎上,各自具有不同的特點和適用場景。

一、共同點:

  1. 實現Set接口:它們都實現了 java.util.Set 接口,因此都具備 Set 的核心特性。
  2. 元素唯一性:它們都能保證集合中的元素是唯一的,不允許重復(根據元素的 equals() 方法判斷)。
  3. 非線程安全:這三個類本身都不是線程安全的。如果在多線程環境下需要對它們進行并發修改,必須進行外部同步,或者使用 java.util.concurrent 包下對應的線程安全集合(如 CopyOnWriteArraySet 或通過 Collections.newSetFromMap(new ConcurrentHashMap<>()) 創建)。
  4. 允許null元素 (大部分情況)
    • HashSetLinkedHashSet 都允許存儲一個 null 元素。
    • TreeSet 默認情況下不允許 null 元素(除非其構造時傳入的 Comparator 明確支持對 null 的比較),因為 null 無法進行自然的比較。

二、主要區別:

主要區別在于它們的底層數據結構不同,這直接導致了它們在元素順序性性能特性適用場景上的差異。

  1. HashSet
    • 底層數據結構:基于哈希表實現,內部實際上是依賴一個 HashMap 實例。元素作為 HashMap 的鍵存儲,值是一個固定的 PRESENT 對象。
    • 元素順序性無序。它不保證元素的任何特定存儲或迭代順序,元素的順序可能與插入順序不同,并且可能隨時間變化(如擴容后)。
    • 性能特性
      • 添加(add)、刪除(remove)、查找(contains)操作的平均時間復雜度是O(1)(假設哈希函數分布良好,哈希沖突不嚴重)。
      • 最壞情況下的時間復雜度(哈希沖突嚴重導致鏈表過長)是 O(N)。在 JDK 1.8+ 中,當鏈表過長會轉換為紅黑樹,此時最壞情況為 O(log N)。
    • 適用場景:當對集合中元素的順序沒有要求,只關心元素的唯一性和高效的存取操作時,HashSet 是最常用的選擇。
  2. LinkedHashSet
    • 底層數據結構:基于哈希表 + 雙向鏈表實現。它繼承自 HashSet,內部依賴一個 LinkedHashMap 實例。
    • 元素順序性有序,保持插入順序。迭代時,元素將按照它們被添加到集合中的順序出現。
    • 性能特性
      • 添加、刪除、查找操作的平均時間復雜度仍然是O(1)(與 HashSet 類似)。
      • 但由于需要額外維護雙向鏈表,其性能常數因子會略大于 HashSet(即,在相同數據量和哈希分布下,LinkedHashSet 的操作會比 HashSet 稍微慢一點點)。
    • 適用場景:當既需要保證元素的唯一性,又需要保持元素插入時的順序時,LinkedHashSet 是理想選擇。例如,實現 LRU (Least Recently Used) 緩存的鍵集合時,或者需要按歷史記錄順序展示唯一項時。
  3. TreeSet
    • 底層數據結構:基于紅黑樹 (Red-Black Tree) 實現。內部依賴一個 TreeMap 實例(更準確地說是 NavigableMap)。
    • 元素順序性有序,按照元素的比較規則排序
      • 可以是元素的自然順序(如果元素實現了 Comparable 接口)。
      • 也可以是根據創建 TreeSet 時提供的自定義比較器 (Comparator) 的順序。
    • 性能特性
      • 添加、刪除、查找操作的時間復雜度是O(log N),其中 N 是集合中元素的數量。這是由紅黑樹的特性決定的。
    • 適用場景:當需要一個自動排序的、元素唯一的集合時,TreeSet 是最佳選擇。它還提供了豐富的導航方法(如獲取最小/最大元素、獲取某個范圍的子集等)。

三、總結列表:

特性HashSetLinkedHashSetTreeSet
元素唯一
線程安全
null支持允許一個允許一個默認不允許 (除非 Comparator 支持)
順序性無序按插入順序按比較規則排序 (自然/自定義)
底層實現哈希表 (基于 HashMap)哈希表 + 雙向鏈表 (基于 LinkedHashMap)紅黑樹 (基于 TreeMap)
性能 (平均)O(1) (add, remove, contains)O(1) (add, remove, contains) (略慢于HashSet)O(log N) (add, remove, contains)
主要用途快速存取,無序唯一集合保持插入順序的唯一集合自動排序的唯一集合,支持導航操作

正如您所說,選擇哪種 Set 實現主要取決于我們對元素順序的具體需求:

  • 如果不需要任何特定順序,追求最高效的存取,用 HashSet
  • 如果需要保持元素的插入順序,用 LinkedHashSet
  • 如果需要元素自動按某種規則排序,用 TreeSet

參考小林coding和JavaGuide

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

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

相關文章

「數據分析 - NumPy 函數與方法全集」【數據分析全棧攻略:爬蟲+處理+可視化+報告】

- 第 104 篇 - Date: 2025 - 06 - 05 Author: 鄭龍浩/仟墨 NumPy 函數與方法全集 文章目錄 NumPy 函數與方法全集1. 數組創建與初始化基礎創建序列生成特殊數組 2. 數組操作形狀操作合并與分割 3. 數學運算基礎運算統計運算 4. 隨機數生成基礎隨機分布函數 5. 文件IO文件讀寫 …

報表/報告組件(二)-實例與實現解釋

上篇《報表/報告組件(一)-指標/屬性組件設計》介紹了組件核心指標/屬性設計&#xff0c;本文以實例介紹各個特性的實現和效果&#xff0c;實例是多個報告融合&#xff0c;顯示所有的特性。 設計 指標/屬性組件是報告/報表關鍵部分&#xff0c;上篇已介紹過&#xff0c;本節回顧…

Flutter嵌入式開發實戰 ——從樹莓派到智能家居控制面板,打造工業級交互終端

一、為何選擇Flutter開發嵌入式設備&#xff1f; 1. 跨平臺能力降維打擊 特性傳統方案Flutter方案開發效率需分別開發Android/Linux一套代碼多端部署內存占用200MB (QtWeb引擎)<80MB (Release模式)熱重載支持不支持支持 2. 工業級硬件支持實測 樹莓派4B&#xff1a;1080…

[藍橋杯]機器人塔

題目描述 X 星球的機器人表演拉拉隊有兩種服裝&#xff0c;A 和 B。 他們這次表演的是搭機器人塔。 類似&#xff1a; A B B A B A A A B B B B B A B A B A B B A 隊內的組塔規則是&#xff1a; A 只能站在 AA 或 BB 的肩上。 B 只能站在 AB 或 BA 的肩上。 你的…

語雀文檔保存失敗URI malformed

原因 原因未知&#xff0c;我用deekseek將回答的答案復制到語雀文檔時出現了這個異常&#xff0c;在知識庫里面一直保存失敗 語雀文檔保存失敗URI malformed 解決方案 使用小記&#xff0c;將里面的內容轉移到小記里&#xff0c;將小記移到知識庫中即可

小明的Java面試奇遇之互聯網保險系統架構與性能優化

一、文章標題 小明的Java面試奇遇之互聯網保險系統架構與性能優化&#x1f680; 二、文章標簽 Java,Spring Boot,MyBatis,Redis,Kafka,JVM,多線程,互聯網保險,系統架構,性能優化 三、文章概述 本文模擬了程序員小明在應聘互聯網保險系統開發崗位時&#xff0c;參與的一場深…

從零開始的嵌入式學習day33

網絡編程及相關概念 UDP網絡通信程序 UDP網絡通信操作 一、網絡編程及相關概念 1. 網絡編程概念&#xff1a; 指通過計算機網絡實現程序間通信的技術&#xff0c;涉及協議、套接字、數據傳輸等核心概念。常見的應用場景包括客戶端-服務器模型、分布式系統、實時通信等。…

Kotlin 1. 搭建Kotlin開發環境

本實戰概述旨在指導用戶搭建Kotlin開發環境&#xff0c;并進行簡單的編程實踐。首先&#xff0c;用戶需安裝IntelliJ IDEA&#xff0c;并進行基本設置&#xff0c;如選擇主題、調整字體和安裝插件等。接著&#xff0c;創建Kotlin項目&#xff0c;設置項目名稱、位置和JDK版本&a…

Mysql的B-樹和B+樹的區別總結

B 樹也稱 B- 樹&#xff0c;全稱為 多路平衡查找樹&#xff0c;B 樹是 B 樹的一種變體。B 樹和 B 樹中的 B 是 Balanced&#xff08;平衡&#xff09;的意思。 目前大部分數據庫系統及文件系統都采用 B-Tree 或其變種 BTree 作為索引結構。 B 樹& B 樹兩者有何異同呢&…

COMSOL學習筆記-靜電場仿真

最近在學習COMSOL&#xff0c;做了一個靜電場仿真的例子&#xff0c;分享一下。 參考了下面的官方案例 計算電容 電容式位置傳感器的邊界元建模 三維模型 首先對靜電測試儀進行三維建模。 Comsol靜電場仿真 使用comsol進行靜電場仿真&#xff0c;控制方程為泊松方程&#…

JavaScript 循環方法對比指南

JavaScript 循環方法對比指南 1. 標準 for 循環 語法&#xff1a; for (let i 0; i < arr.length; i) {console.log(arr[i]); }優點 ? 完全控制索引&#xff0c;適合需要精確控制遍歷順序或步長的場景。 ? 性能最優&#xff0c;在超大規模數據遍歷時比高階方法&#x…

【快餐點餐簡易軟件】佳易王快餐店點餐系統軟件功能及操作教程

一、軟件概述與核心優勢 &#xff08;一&#xff09;試用版獲取方式 資源下載路徑&#xff1a;進入博主頭像主頁第一篇文章末尾&#xff0c;點擊卡片按鈕&#xff1b;或訪問左上角博客主頁&#xff0c;通過右側按鈕獲取詳細資料。 說明&#xff1a;下載文件為壓縮包&#xff…

智慧園區數字孿生全鏈交付方案:降本增效30%,多案例實踐驅動全周期交付

在智慧園區建設浪潮中&#xff0c;數字孿生技術正成為破解傳統園區管理難題的核心引擎。通過構建與物理園區1:1映射的數字模型&#xff0c;實現數據集成、狀態同步與智能決策&#xff0c;智慧園區數字孿生全鏈交付方案已在多個項目中驗證其降本增效價值——某物流園區通過該方案…

從0開始學vue:Element Plus詳解

一、核心架構解析二、技術實現指南三、高級特性實現四、性能優化方案五、生態擴展方案六、調試與測試七、版本演進路線 Element Plus 是專為 Vue 3 設計的桌面端 UI 組件庫&#xff0c;基于 Vue 3 的 Composition API 重構&#xff0c;在保持與 Element UI 兼容性的同時&#x…

Ubuntu系統配置C++的boost庫(含filesystem模塊)的方法

本文介紹在具有sudo權限的Ubuntu操作系統中&#xff0c;配置C 的boost庫的方法。 boost庫是一個廣受歡迎的C 庫集合&#xff0c;提供了許多強大的功能擴展——例如其中的filesystem模塊&#xff0c;可簡化文件和目錄操作&#xff0c;讓開發者可以輕松處理跨平臺的文件系統任務。…

Java集合中Stream流的使用

前言 Java 8 引入了 Stream API&#xff0c;它是一種用于處理集合&#xff08;Collection&#xff09;數據的強大工具。Stream 不是數據結構&#xff0c;而是對數據源進行操作的一種方式&#xff0c;支持聲明式、函數式的操作&#xff0c;如過濾、映射、排序等。 Stream 操作…

.Net Framework 4/C# 屬性和方法

一、屬性的概述 屬性是對實體特征的抽象&#xff0c;用于提供對類或對象的訪問&#xff0c;C# 中的屬性具有訪問器&#xff0c;這些訪問器指定在它們的值被讀取或寫入時需要執行的語句&#xff0c;因此屬性提供了一種機制&#xff0c;用于把讀取和寫入對象的某些特征與一些操作…

asp.net mvc如何簡化控制器邏輯

在ASP.NET MVC中&#xff0c;可以通過以下方法簡化控制器邏輯&#xff1a; ASP.NET——MVC編程_aspnet mvc-CSDN博客 .NET/ASP.NET MVC Controller 控制器&#xff08;IController控制器的創建過程&#xff09; https://cloud.tencent.com/developer/article/1015115 【轉載…

flask功能使用總結和完整示例

Flask 功能使用總結與完整示例 一、Flask 核心功能總結 Flask 是輕量級 Web 框架&#xff0c;核心功能包括&#xff1a; 路由系統&#xff1a;通過 app.route 裝飾器定義 URL 與函數的映射。模板引擎&#xff1a;默認使用 Jinja2&#xff0c;支持動態渲染 HTML。請求處理&…

HarmonyOS應用基礎階段- 09、綜合案例-仿攜程旅行口碑榜

文章目錄 攜程-口碑榜1、banner 區域1.1 區域部分1.2 口碑榜 Logo1.3 推薦榜單1.4 評分規則1.5 底部 Line 2、選擇城市和目的地2.1 區域布局2.2 選擇城市2.3 口碑目的地 3、商業選項菜單4、熱門項目選項4.1 區域布局4.2 熱門標題4.3 選項 5、熱門榜標題6、熱門景點列表6.1 區域…