1"use strict";(self.webpackChunkatips=self.webpackChunkatips||[]).push([[4594],{9667:(n,s,a)=>{a.r(s),a.d(s,{data:()=>e});const e={key:"v-49cda92a",path:"/java/container/collection/java-collection-set.html",title:"Collection - Set",lang:"zh-CN",frontmatter:{},excerpt:"",headers:[{level:2,title:"Set ç®ä»",slug:"set-ç®ä»",children:[]},{level:2,title:"HashSet",slug:"hashset",children:[]},{level:2,title:"LinkedHashSet",slug:"linkedhashset",children:[]},{level:2,title:"åèèµæ",slug:"åèèµæ",children:[]}],filePathRelative:"java/container/collection/java-collection-set.md",git:{updatedTime:1719836412e3,contributors:[{name:"Tianci.Xiong",email:"[email protected]",commits:3},{name:"TianCi.Xiong",email:"[email protected]",commits:2}]}}},1895:(n,s,a)=>{a.r(s),a.d(s,{default:()=>t});const e=(0,a(6252).uE)('<h1 id="collection-set" tabindex="-1"><a class="header-anchor" href="#collection-set" aria-hidden="true">#</a> Collection - Set</h1><h2 id="set-ç®ä»" tabindex="-1"><a class="header-anchor" href="#set-ç®ä»" aria-hidden="true">#</a> Set ç®ä»</h2><p><em>Set</em> 注éç¬ä¸æ äºçæ§è´¨ï¼è¯¥ä½ç³»éåç¨äºå卿 åºï¼åå
¥åååºç顺åºä¸ä¸å®ç¸åï¼å
ç´ ï¼<strong>ä¸å
许æéå¤çå
ç´ </strong>ã对象çç¸çæ§æ¬è´¨æ¯å¯¹è±¡ç <strong>hashCode</strong> å¼ï¼Java æ¯ä¾æ®å¯¹è±¡çå
åå°å计ç®åºçæ¤åºå·ï¼å¤æçï¼å¦ææ³è¦è®©ä¸¤ä¸ªä¸åç对象è§ä¸ºç¸ççï¼å°±å¿
é¡»è¦ç <em>Object</em> ç <code>hashCode()</code> æ¹æ³å <code>equals()</code> æ¹æ³ã</p><p><img src="//gcore.jsdelivr.net/gh/tiancixiong/atips@img-230529/images/java/container/collection/image-20211023214554753.png" alt="image-20211023214554753"></p><ul><li><em><strong>Set</strong></em> ç»§æ¿äº Collection çæ¥å£ãå®é
ä¸ï¼Set å°±æ¯ä¸ä¸ª Collectionï¼åªæ¯è¡ä¸ºä¸åï¼è¿æ¯ç»§æ¿åå¤æææ³çå
¸ååºç¨ï¼è¡¨ç°ä¸åçè¡ä¸ºï¼ï¼</li><li><em><strong>SortedSet</strong></em> ç»§æ¿äº <em>Set</em> çæ¥å£ã<em>SortedSet</em> ä¸çå
å®¹æ¯æåºçå¯ä¸å¼ï¼æåºçæ¹æ³æ¯éè¿æ¯è¾å¨(Comparator)ï¼</li><li><em><strong>NavigableSet</strong></em> ç»§æ¿äº SortedSet çæ¥å£ã宿ä¾äºä¸°å¯çæ¥æ¾æ¹æ³ï¼å¦"è·å大äº/çäºæå¼çå
ç´ "ãâè·åå°äº/çäºæå¼çå
ç´ âççï¼</li><li><em><strong>AbstractSet</strong></em> æ¯ä¸ä¸ªæ½è±¡ç±»ï¼å®ç»§æ¿äº AbstractCollectionï¼AbstractCollection å®ç°äº <em>Set</em> ä¸çç»å¤§é¨åæ¹æ³ï¼ä¸ºå®ç° <em>Set</em> çå®ä¾ç±»æä¾äºä¾¿å©ï¼</li><li><em><strong>HashSet</strong></em> ç±»ä¾èµäº HashMapï¼å®å®é
䏿¯éè¿ <em>HashMap</em> å®ç°çã<em>HashSet</em> ä½¿ç¨æ£å彿°åå¨å
ç´ ï¼å
ç´ æ¯æ åºçãæ£åçï¼</li><li><em><strong>TreeSet</strong></em> ç±»ä¾èµäº TreeMapï¼å®å®é
䏿¯éè¿ TreeMap å®ç°çãTreeSet å°å
ç´ åå¨å¨çº¢-黿 æ°æ®ç»æä¸ï¼å
ç´ æ¯æåºçï¼å®æ¯æèªç¶æåºæè
ç¨æ·æå®æ¯è¾å¨æåºç <em>Set</em>ï¼</li><li><em><strong>LinkedHashSet</strong></em> æ¯ææå
¥é¡ºåºæåºç Setï¼</li><li><em><strong>EnumSet</strong></em> æ¯åªè½åæ¾ Emum æä¸¾ç±»åç Setã</li></ul><hr><p><img src="img/20200221190717.png" alt="img"></p><h2 id="hashset" tabindex="-1"><a class="header-anchor" href="#hashset" aria-hidden="true">#</a> HashSet</h2><p><em>HashSet</em> æ¯å¯¹ <em>HashMap</em> çç®åå
è£
ï¼å¯¹ <em>HashSet</em> ç彿°è°ç¨é½ä¼è½¬æ¢æåéç <em>HashMap</em> æ¹æ³ã</p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">package</span> <span class="token namespace">java<span class="token punctuation">.</span>util</span><span class="token punctuation">;</span>\n\n<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">HashSet</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">E</span><span class="token punctuation">></span></span>\n <span class="token keyword">extends</span> <span class="token class-name">AbstractSet</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">E</span><span class="token punctuation">></span></span>\n <span class="token keyword">implements</span> <span class="token class-name">Set</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">E</span><span class="token punctuation">></span></span><span class="token punctuation">,</span> <span class="token class-name">Cloneable</span><span class="token punctuation">,</span> <span class="token class-name"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span>Serializable</span>\n<span class="token punctuation">{</span>\n\t<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>\n\t<span class="token keyword">private</span> <span class="token keyword">transient</span> <span class="token class-name">HashMap</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">E</span><span class="token punctuation">,</span><span class="token class-name">Object</span><span class="token punctuation">></span></span> map<span class="token punctuation">;</span> <span class="token comment">//HashSeté颿ä¸ä¸ªHashMap</span>\n <span class="token comment">// PRESENT æ¯ç¨äºå
³è map ä¸å½åæä½å
ç´ çä¸ä¸ªèæå¼</span>\n <span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token class-name">Object</span> PRESENT <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Object</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n \n <span class="token keyword">public</span> <span class="token class-name">HashSet</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n map <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token generics"><span class="token punctuation"><</span><span class="token punctuation">></span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n <span class="token punctuation">}</span>\n \n <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>\n <span class="token keyword">public</span> <span class="token keyword">boolean</span> <span class="token function">add</span><span class="token punctuation">(</span><span class="token class-name">E</span>
1 e<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">//è½¬æ¢æ map æ¹æ³</span>\n <span class="token keyword">return</span> map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span>e<span class="token punctuation">,</span> PRESENT<span class="token punctuation">)</span><span class="token operator">==</span><span class="token keyword">null</span><span class="token punctuation">;</span>\n <span class="token punctuation">}</span>\n <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>\n<span class="token punctuation">}</span>\n</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br></div></div><ul><li>HashSet ä¸ç»´æ¤äºä¸ä¸ª HashMap 对象 <code>map</code>ï¼HashSet çéè¦æ¹æ³ï¼å¦ <code>add()</code>ã<code>remove()</code>ã<code>iterator()</code>ã<code>clear()</code>ã<code>size()</code> ç齿¯å´ç» map å®ç°çã</li><li>HashSet ç±»ä¸éè¿å®ä¹ <code>writeObject()</code> å <code>readObject()</code> æ¹æ³ç¡®å®äºå
¶åºåååååºååçæºå¶ã</li><li><code>PRESENT</code> æ¯ç¨äºå
³è map ä¸å½åæä½å
ç´ çä¸ä¸ªèæå¼ã</li></ul><p>åå¸è¡¨è¾¹åæ¾çæ¯åå¸å¼ãHashSet åå¨å
ç´ ç顺åºå¹¶ä¸æ¯æç
§åå
¥æ¶ç顺åºï¼å List æ¾ç¶ä¸åï¼ èæ¯æç
§<strong>åå¸å¼</strong>æ¥åçï¼æä»¥åæ°æ®ä¹æ¯æç
§åå¸å¼åçãå
ç´ çåå¸å¼æ¯éè¿å
ç´ ç <code>hashCode()</code> æ¹æ³æ¥è·åçï¼HashSet é¦å
å¤æä¸¤ä¸ªå
ç´ çåå¸å¼ï¼å¦æåå¸å¼ä¸æ ·ï¼æ¥ç伿¯è¾ <code>equals()</code> æ¹æ³ã妿 <code>equls()</code> ç»æä¸º true ï¼HashSet å°±è§ä¸ºåä¸ä¸ªå
ç´ ï¼å¦æ <code>equals()</code> 为 false 就䏿¯åä¸ä¸ªå
ç´ ã</p><p>åå¸å¼ç¸å <code>equals()</code> 为 false çå
ç´ æ¯æä¹åå¨å¢ï¼å°±æ¯å¨åæ ·çåå¸å¼ä¸é¡ºå»¶ï¼å¯ä»¥è®¤ä¸ºåå¸å¼ç¸åçå
ç´ æ¾å¨ä¸ä¸ªå叿¡¶ä¸ï¼ãä¹å°±æ¯åå¸ä¸æ ·çåå¨ä¸åä¸ã</p><blockquote><p>HashSet éè¿ hashCode 弿¥ç¡®å®å
ç´ å¨å
åä¸çä½ç½®ãä¸ä¸ª hashCode ä½ç½®ä¸å¯ä»¥åæ¾å¤ä¸ªå
ç´ ã</p></blockquote><h2 id="linkedhashset" tabindex="-1"><a class="header-anchor" href="#linkedhashset" aria-hidden="true">#</a> LinkedHashSet</h2><p><em>LinkedHashSet</em> æ¯ææå
¥é¡ºåºæåºç <em>Set</em>ã</p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token keyword">package</span> <span class="token namespace">java<span class="token punctuation">.</span>util</span><span class="token punctuation">;</span>\n<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">LinkedHashSet</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">E</span><span class="token punctuation">></span></span>\n <span class="token keyword">extends</span> <span class="token class-name">HashSet</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">E</span><span class="token punctuation">></span></span>\n <span class="token keyword">implements</span> <span class="token class-name">Set</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">E</span><span class="token punctuation">></span></span><span class="token punctuation">,</span> <span class="token class-name">Cloneable</span><span class="token punctuation">,</span> <span class="token class-name"><span class="token namespace">java<span class="token punctuation">.</span>io<span class="token punctuation">.</span></span>Serializable</span> <span class="token punctuation">{</span>\n \n <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>\n <span class="token keyword">public</span> <span class="token class-name">LinkedHashSet</span><span class="token punctuation">(</span><span class="token keyword">int</span> initialCapacity<span class="token punctuation">,</span> <span class="token keyword">float</span> loadFactor<span class="token punctuation">)</span> <span class="token punctuation">{</span>
1\n <span class="token keyword">super</span><span class="token punctuation">(</span>initialCapacity<span class="token punctuation">,</span> loadFactor<span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n <span class="token punctuation">}</span>\n \n <span class="token keyword">public</span> <span class="token class-name">LinkedHashSet</span><span class="token punctuation">(</span><span class="token keyword">int</span> initialCapacity<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n <span class="token keyword">super</span><span class="token punctuation">(</span>initialCapacity<span class="token punctuation">,</span> <span class="token number">.75f</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n <span class="token punctuation">}</span>\n \n <span class="token keyword">public</span> <span class="token class-name">LinkedHashSet</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n <span class="token keyword">super</span><span class="token punctuation">(</span><span class="token number">16</span><span class="token punctuation">,</span> <span class="token number">.75f</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n <span class="token punctuation">}</span>\n <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>\n<span class="token punctuation">}</span>\n</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br></div></div><p><code>LinkedHashSet</code> å
ç个æé æ¹æ³é½æ¯è°ç¨ç¶ç±» <code>HashSet</code> çæé æ¹æ³ãéè¦å¼ºè°çæ¯ï¼<strong>LinkedHashSet æé æ¹æ³å®é
ä¸è°ç¨çæ¯ç¶ç±» HashSet çé public æé æ¹æ³ã</strong></p><div class="language-java ext-java line-numbers-mode"><pre class="language-java"><code><span class="token comment">// java.util.HashSet</span>\n<span class="token class-name">HashSet</span><span class="token punctuation">(</span><span class="token keyword">int</span> initialCapacity<span class="token punctuation">,</span> <span class="token keyword">float</span> loadFactor<span class="token punctuation">,</span> <span class="token keyword">boolean</span> dummy<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n map <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">LinkedHashMap</span><span class="token generics"><span class="token punctuation"><</span><span class="token punctuation">></span></span><span class="token punctuation">(</span>initialCapacity<span class="token punctuation">,</span> loadFactor<span class="token punctuation">)</span><span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n\n<span class="token keyword">public</span> <span class="token class-name">HashSet</span><span class="token punctuation">(</span><span class="token keyword">int</span> initialCapacity<span class="token punctuation">,</span> <span class="token keyword">float</span> loadFactor<span class="token punctuation">)</span> <span class="token punctuation">{</span>\n map <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token generics"><span class="token punctuation"><</span><span class="token punctuation">></span></span><span class="token punctuation">(</span>initialCapacity<span class="token punctuation">,</span> loadFactor<span class="token punctuation">)</span><span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br></div></div><p>ä¸åäº <code>HashSet</code> å
<code>public</code> æé æ¹æ³ä¸åå§åç <code>HashMap</code> å®ä¾ï¼è¿ä¸ªæé æ¹æ³ä¸ï¼åå§åäº <code>LinkedHashMap</code> å®ä¾ã</p><p>ä¹å°±æ¯è¯´ï¼å®é
ä¸ï¼<code>LinkedHashSet</code> ç»´æ¤äºä¸ä¸ªåé¾è¡¨ãç±åé¾è¡¨çç¹æ§å¯ä»¥ç¥éï¼å®æ¯æç
§å
ç´ çæå
¥é¡ºåºä¿åçãæä»¥ï¼è¿å°±æ¯ <code>LinkedHashSet</code> ä¸åå¨çå
ç´ æ¯æç
§æå
¥é¡ºåºä¿åçåçã</p><h2 id="åèèµæ" tabindex="-1"><a class="header-anchor" href="#åèèµæ" aria-hidden="true">
1#</a> åèèµæ</h2><ul><li>https://dunwu.github.io/javacore/container/java-container-set.html</li></ul>',23),p={},t=(0,a(3744).Z)(p,[["render",function(n,s){return e}]])},3744:(n,s)=>{s.Z=(n,s)=>{for(const[a,e]of s)n[a]=e;return n}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.