淺析Java中的set集合類(lèi)型及其接口的用法
概念
首先,我們看看Set集合。
(01) Set 是繼承于Collection的接口。它是一個(gè)不允許有重復(fù)元素的集合。
(02) AbstractSet 是一個(gè)抽象類(lèi),它繼承于AbstractCollection,AbstractCollection實(shí)現(xiàn)了Set中的絕大部分函數(shù),為Set的實(shí)現(xiàn)類(lèi)提供了便利。
(03) HastSet 和 TreeSet 是Set的兩個(gè)實(shí)現(xiàn)類(lèi)。
HashSet依賴(lài)于HashMap,它實(shí)際上是通過(guò)HashMap實(shí)現(xiàn)的。HashSet中的元素是無(wú)序的。
TreeSet依賴(lài)于TreeMap,它實(shí)際上是通過(guò)TreeMap實(shí)現(xiàn)的。TreeSet中的元素是有序的。
eg:
下面我們以遍歷違例來(lái)看看set集合的利用:
package com.sort; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * 一個(gè)不包含重復(fù)元素的 collection。更確切地講,set 不包含滿足 e1.equals(e2) 的元素對(duì) e1 和 e2, * @author Owner * */ public class SetTest2 { public static void main(String[] args) { Set<String> set = new HashSet<String>(); set.add("a"); set.add("b"); set.add("c"); set.add("d"); set.add("e"); set.add("e");//不能放入重復(fù)數(shù)據(jù) /** * 遍歷方法一,迭代遍歷 */ for(Iterator<String> iterator = set.iterator();iterator.hasNext();){ System.out.print(iterator.next()+" "); } System.out.println(); System.out.println("********************"); /** * for增強(qiáng)循環(huán)遍歷 */ for(String value : set){ System.out.print(value+" "); } } }
注意:這里Set集合中放入的是String類(lèi)型,假如我們放入一個(gè)自己定義的類(lèi)實(shí)例的時(shí)候,比如Person類(lèi)實(shí)例,這時(shí)候我們要自己重新hashcode和equal方法,用自己的關(guān)鍵字段來(lái)重寫(xiě),因?yàn)楫?dāng)使用HashSet時(shí),hashCode()方法就會(huì)得到調(diào)用,判斷已經(jīng)存儲(chǔ)在集合中的對(duì)象的hash code值是否與增加的對(duì)象的hash code值一致;如果不一致,直接加進(jìn)去;如果一致,再進(jìn)行equals方法的比較,equals方法如果返回true,表示對(duì)象已經(jīng)加進(jìn)去了,就不會(huì)再增加新的對(duì)象,否則加進(jìn)去。
相關(guān)文章
springboot?vue接口測(cè)試HutoolUtil?TreeUtil處理樹(shù)形結(jié)構(gòu)
這篇文章主要介紹了springboot?vue接口測(cè)試HutoolUtil?TreeUtil處理樹(shù)形結(jié)構(gòu),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05SpringMVC中控制器返回JSON數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了SpringMVC中控制器返回JSON數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07引入QQ郵箱發(fā)送驗(yàn)證碼進(jìn)行安全校驗(yàn)功能實(shí)現(xiàn)
最近遇到這樣的需求用戶(hù)輸入自己的郵箱,點(diǎn)擊獲取驗(yàn)證碼,后臺(tái)會(huì)發(fā)送一封郵件到對(duì)應(yīng)郵箱中,怎么實(shí)現(xiàn)呢?下面小編給大家?guī)?lái)了引入QQ郵箱發(fā)送驗(yàn)證碼進(jìn)行安全校驗(yàn)功能,需要的朋友可以參考下2023-02-02Java后臺(tái)基于POST獲取JSON格式數(shù)據(jù)
這篇文章主要介紹了Java后臺(tái)基于POST獲取JSON格式數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03詳解mybatis通過(guò)mapper接口加載映射文件
本篇文章主要介紹了mybatis通過(guò)mapper接口加載映射文件 ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08簡(jiǎn)單的一次springMVC路由跳轉(zhuǎn)實(shí)現(xiàn)
本文主要介紹了springMVC路由跳轉(zhuǎn)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04Springboot全局異常捕獲及try catch區(qū)別解析
這篇文章主要介紹了Springboot全局異常捕獲及try catch區(qū)別解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Spring Security基本架構(gòu)與初始化操作流程詳解
這篇文章主要介紹了Spring Security基本架構(gòu)與初始化操作流程,Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問(wèn)控制解決方案的安全框架2023-03-03SpringBoot配置自定義攔截器實(shí)現(xiàn)過(guò)程詳解
在系統(tǒng)中經(jīng)常需要在處理用戶(hù)請(qǐng)求之前和之后執(zhí)行一些行為,例如檢測(cè)用戶(hù)的權(quán)限,或者將請(qǐng)求的信息記錄到日志中,即平時(shí)所說(shuō)的"權(quán)限檢測(cè)"及"日志記錄",下面這篇文章主要給大家介紹了關(guān)于在SpringBoot項(xiàng)目中整合攔截器的相關(guān)資料,需要的朋友可以參考下2022-10-10springboot單元測(cè)試兩種方法實(shí)例詳解
這篇文章主要介紹了springboot單元測(cè)試兩種方法實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12