小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Java中Set的數(shù)據(jù)結(jié)構(gòu)及基本功能使用

 印度阿三17 2019-07-17

Set是一個(gè)接口,它有兩種實(shí)現(xiàn)分別是HashSet和TreeSet。 Set的特點(diǎn)是不保存重復(fù)的元素,它和數(shù)學(xué)概念上的集合相似,它支持交集、并集、差集操作。 本文將介紹HashSet和TreeSet使用的數(shù)據(jù)結(jié)構(gòu)以及兩種Set實(shí)現(xiàn)各自的應(yīng)用場(chǎng)景,然后介紹交集、并集、差集的使用。

HashSet vs TreeSet

HashSet底層使用HashMap實(shí)現(xiàn),使用了數(shù)組和散列算法實(shí)現(xiàn),TreeSet使用TreeMap實(shí)現(xiàn),使用了紅黑樹數(shù)據(jù)結(jié)構(gòu)。關(guān)于HashMap和TreeMap實(shí)現(xiàn)原理可以翻閱前面的文章。HashSet的優(yōu)點(diǎn)是查找速度快,缺點(diǎn)是不能順序遍歷Set中的元素,TreeSet的優(yōu)點(diǎn)是可以順序遍歷Set中的元素,缺點(diǎn)是查找速度比HashSet稍慢,實(shí)際應(yīng)用中優(yōu)先使用HashSet,有排序需求時(shí)才考慮使用TreeSet。

交集

假設(shè)有集合A和集合B,所有既屬于A又屬于B的元素組成的集合,稱為集合A于集合B的交集。Set中交集使用retainAll方法實(shí)現(xiàn), 示例代碼如下:

//交集示例代碼
Set<String> set1 = new HashSet<String>();
set1.add("A");
set1.add("B");
set1.add("C");
set1.add("D");

Set<String> set2 = new HashSet<String>();
set2.add("C");
set2.add("D");
set2.add("E");
set2.add("F");

set1.retainAll(set2);
System.out.println(set1);

/*程序執(zhí)行輸出結(jié)果:
[C, D]

*/

并集

假設(shè)有集合A和集合B,把A和B中的所有元素合并在一起組成的集合,稱為集合A和集合B的并集。Set中并集使用addAll方法實(shí)現(xiàn),示例代碼如下:

//并集操作示例代碼
Set<String> set1 = new HashSet<String>();
set1.add("A");
set1.add("B");
set1.add("C");
set1.add("D");

Set<String> set2 = new HashSet<String>();
set2.add("E");
set2.add("F");
set2.add("G");
set2.add("H");

set1.addAll(set2);
System.out.println(set1);

/*程序執(zhí)行輸出結(jié)果:
[A, B, C, D, E, F, G, H]

*/

差集

假設(shè)有集合A和集合B,所有屬于A且不屬于B的元素組成的集合,稱為集合A和集合B的差集。Set中 差集使用removeAll方法實(shí)現(xiàn),示例代碼如下:

//差集操作示例代碼
Set<String> set1 = new HashSet<String>();
set1.add("A");
set1.add("B");
set1.add("C");
set1.add("D");

Set<String> set2 = new HashSet<String>();
set2.add("C");
set2.add("D");
set2.add("E");
set2.add("F");

set1.removeAll(set2);
System.out.println(set1);

/*程序執(zhí)行輸出結(jié)果:
[A, B]

*/

最后

交集、并集、差集使用的方法都來自Collection接口,那么實(shí)現(xiàn)了Collection的其它非Set容器是否也可以進(jìn)行數(shù)學(xué)集合操作?嚴(yán)格意義上來說只有Map和Set可以用來實(shí)現(xiàn)數(shù)學(xué)集合操作,因?yàn)閿?shù)學(xué)集合沒有重復(fù)元素,Map和Set不能包含重復(fù)的鍵或元素,而數(shù)組、鏈表數(shù)據(jù)結(jié)構(gòu)可以包含重復(fù)的元素,所以只能使用Map和Set來處理數(shù)學(xué)集合操作。Map是一個(gè)鍵值對(duì)集合,如果使用Map進(jìn)行數(shù)學(xué)集合操作,那么我們往Map中添加元素時(shí)除了鍵以外還需要指定一個(gè)值。Set底層是對(duì)Map的封裝,它隱藏了Map中鍵值對(duì)的值,我們只需關(guān)注鍵,所以實(shí)際應(yīng)用中數(shù)學(xué)集合操作只用Set處理。


來源:https://www./content-1-335251.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多