JAVA Set接口和其常用子類HashSet集合

Set接口,它里面的集合,所存儲的元素就是不重復的。

HashSet集合,采用哈希表結構存儲數據,保證元素唯一性的方式依賴于:hashCode()與equals()方法。

保證HashSet集合元素的唯一,其實就是根據對象的hashCode和equals方法來決定的。如果我們往集合中存放自定義的對象,那么保證其唯一,就必須復寫hashCode和equals方法建立屬于當前對象的比較方式。

?

HashSet中存儲JavaAPI中提供的類型元素時,不需要重寫元素的hashCode和equals方法,因為這兩個方法,在JavaAPI的每個類中已經重寫完畢,如String類、Integer類等。

?創建HashSet集合,存儲String對象。

package com.oracle.www.demo03;
import java.util.HashSet;import javax.swing.plaf.synth.SynthSeparatorUI;
public class Demo03 {public static void main(String[] args) {
//獲得Object對象,輸出Object的hashCode算法Object obj
= new Object();System.out.println(obj.hashCode());
//創建Hash對象HashSet
<String> set = new HashSet<String>();set.add("abc");set.add("bcd");set.add("ghj");set.add("abc");
//遍歷集合
for(String s:set) {System.out.println(s);System.out.println(s.hashCode());}}}

輸出結果如下,說明集合中不能存儲重復元素:

370988149
bcd
97347
abc
96354
ghj
102313

?HashSet存儲自定義類型元素

HashSet中存放自定義類型元素時,需要重寫對象中的hashCode和equals方法,建立自己的比較方式,才能保證HashSet集合中的對象唯一。

自定義Student類

public class Student {private String name;private int age;public Student(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if(!(obj instanceof Student)){System.out.println("類型錯誤");return false;}Student other = (Student) obj;return this.age ==  other.age && this.name.equals(other.name);}
}

?

?創建HashSet集合,存儲Student對象。

public class HashSetDemo {public static void main(String[] args) {//創建HashSet對象HashSet hs = new HashSet();//給集合中添加自定義對象hs.add(new Student("zhangsan",21));hs.add(new Student("lisi",22));hs.add(new Student("wangwu",23));hs.add(new Student("zhangsan",21));//取出集合中的每個元素Iterator it = hs.iterator();while(it.hasNext()){Student s = (Student)it.next();System.out.println(s);}}
}

輸出結果如下,說明集合中不能存儲重復元素:

Student [name=lisi, age=22]

Student [name=zhangsan, age=21]

Student [name=wangwu, age=23]

?

?

HashSet下面有一個子類LinkedHashSet,它是鏈表和哈希表組合的一個數據存儲結構。LinkedHashSet為雙鏈接結構,所以能保證唯一性和有序存儲。

package com.cracle.www.demo01;import java.util.HashSet;
import java.util.LinkedHashSet;public class Demo01 {public static void main(String[] args) {//LinkedHashSet不能存重復元素,但是是有序的,是HashSet的子類。LinkedHashSet<String> has = new LinkedHashSet<String>();has.add("c");has.add("b");has.add("a");for(String a:has) {System.out.println(a);}}}

輸出為?

c
b
a

轉載于:https://www.cnblogs.com/time-to-despair/p/9763581.html

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

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

相關文章

python初始化函數_當你學會了Python爬蟲,網上的圖片素材就免費了

前言本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。加入作者的python學習圈子&#xff1a;1156465813 即可免費獲取&#xff0c;資料全在群文件里。資料可以領取包括不限于Python實戰演練、PDF電子文檔…

第三周作業(一)單元測試

下載vs2015安裝包&#xff0c;打開進行安裝. 選擇顏色 安裝完成&#xff0c;需要登錄 啟動vs 單元測試 1.打開vs界面。 2.新建項目。選擇Visual C# 創建類庫。 3.點擊確定后&#xff0c;進入代碼編輯界面。 4.根據書中代碼&#xff0c;寫入程序&#xff0c;并進行測試。 轉載于…

React-Native-lesson

React-Native-lesson 一、React-Native入門指南 lesson2: 認識代碼結構lesson4: 學會React-Native布局&#xff08;一&#xff09;lesson6: UI組件lesson8: 自己動手寫組件 https://github.com/vczero/toilet React Native完全開發的獨立App&#xff0c;支持ES6語法&#xff0c…

1、如何進行字符串常量中的字符定位_Java String:字符串常量池,我相信會有很多朋友不很理解這部分...

作為最基礎的引用數據類型&#xff0c;Java 設計者為 String 提供了字符串常量池以提高其性能&#xff0c;那么字符串常量池的具體原理是什么&#xff0c;我們帶著以下三個問題&#xff0c;去理解字符串常量池&#xff1a;字符串常量池的設計意圖是什么&#xff1f;字符串常量池…

Egret中使用P2物理引擎

游戲中的對象按照物理規律移動&#xff0c;體現重力、引力、反作用力、加速度等物體特性&#xff0c;實現自由落體、搖擺運動、拋物線運動&#xff0c;以及物理碰撞現象的模擬。用于模擬物理碰撞、物理運動的引擎稱為物理引擎。 來自瑞典斯德哥爾摩大學的Stefan Hedman基于Java…

react項目_如何從零開始創建React項目(三種方式)

在開發React項目前最關鍵的當然是項目的創建&#xff0c;現在的前端工程化使得前端項目的創建也變得越來越復雜&#xff0c;在這里介紹三種從零開始創建React項目的方式&#xff0c;分別是在瀏覽器中直接引入、使用官方腳手架create-react-app、使用Webpack創建。瀏覽器中通過標…

利用JSONP解決AJAX跨域問題的原理與jQuery解決方案

寫在前面 跨域的解決方案有多種&#xff0c;其中最常見的是使用同一服務器下的代理來獲取遠端數據&#xff0c;再通過ajax進行讀取&#xff0c;而在這期間經過了兩次請求過程&#xff0c;使得獲取數據的效率大大降低&#xff0c;這篇文章藍飛就為大家介紹一下解決跨域問題的一種…

江西理工大學南昌校區cool code競賽

這次比賽原本就是來打醬油的&#xff0c;想做個簽到題就走&#xff01;一開始不知道1002是簽到題&#xff0c;一直死磕1001&#xff0c;WA了四發過了&#xff0c;回頭一看Rank&#xff0c;三十名&#xff0c;我靠&#xff01;看了1001的AC率&#xff0c;在我AC之前只有一個人AC…

mysql 枚舉_詳解MySQL數據類型之枚舉類型ENUM的用法

本節主要內容&#xff1a;MySQL數據類型之枚舉類型ENUMMySQL數據庫提供針對字符串存儲的一種特殊數據類型&#xff1a;枚舉類型ENUM&#xff0c;這種數據類型可以給予我們更多提高性能、降低存儲容量和降低程序代碼理解的技巧&#xff0c;前面介紹了首先介紹了四種數據類型的特…

# 異運算_小學數學運算三要點:定律、法則與順序(解析)

很多孩子的數學不好&#xff0c;尤其是女孩子。家長往往認定為數學不好就是孩子不擅長&#xff0c;能力差。其實未必&#xff0c;有的孩子數學不好的原因并不在于智商&#xff0c;而是沒有理解到數學的方法與邏輯&#xff0c;比如小學的運算中&#xff0c;很多孩子并沒有了解到…

如何實現一個教師與學生教學輔助平臺?

在軟件工程的學習過程中&#xff0c;我們要完成一個團體項目&#xff0c;關于個人教學輔助系統&#xff0c;對于這個&#xff0c;還有太多要學。對于如何實現其中的功能&#xff0c;我們會利用到html&#xff0c;css等語言來編寫網頁前端&#xff0c;同樣也會用到數據庫的知識。…

證明創建runnable實例和普通類時間一樣長

import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;//證明創建runnable實例和普通類時間一樣長public class Test002 { private Concurre…

mysql數據庫維護_維護MySQL數據庫表

在本教程中&#xff0c;我們將向您介紹一些非常有用的語句&#xff0c;使您可以在MySQL中維護數據庫表。MySQL提供了幾個有用的語句&#xff0c;可以有效地維護數據庫表。 這些語句使您能夠分析&#xff0c;優化&#xff0c;檢查和修復數據庫表。分析表語句MySQL查詢優化器是My…

node-glob 正則表達式

https://github.com/isaacs/node-glob轉載于:https://www.cnblogs.com/chris-oil/p/6507368.html

機器學習筆記—再談廣義線性模型

前文從線性回歸和 Logistic 回歸引出廣義線性回歸的概念&#xff0c;很多人還是很困惑&#xff0c;不知道為什么突然來個廣義線性回歸&#xff0c;有什么用&#xff1f;只要知道連續值預測就用線性回歸、離散值預測就用 Logistic 回歸不就行了&#xff1f;還有一些概念之間的關…

python連接access數據庫odbc_對Python通過pypyodbc訪問Access數據庫的方法詳解

看書上通過ODBC訪問數據庫的案例&#xff0c;想實踐一下在Python 3.6.1中實現access2003數據庫的鏈接&#xff0c;但是在導入odbc模塊的時候出現了問題&#xff0c;后來查了一些資料就嘗試著使用pypyodbc&#xff0c;最后成功了。操作步驟&#xff1a;①安裝pypyodbc目前Python…

mysql異機備份

xx.xx..4.43----xx.xx..4.51 1、配置client通過密鑰來連接server 43機器上&#xff1a; /root/.ssh 目錄下執行 ssh-keygen -t rsa ls /root/.ssh會發現在/root/.ssh下生成一對密鑰id_dsa和id_dsa.pub&#xff0c;將生成的公鑰id_dsa.pub拷貝到server的/root/.ssh目錄下&#…

周末想找個地方敲代碼_觀看我們的代碼游戲,全周末直播

周末想找個地方敲代碼by freeCodeCamp通過freeCodeCamp 觀看我們的代碼游戲&#xff0c;全周末直播 (Watch us Code Games Live All Weekend) Note: this was originally published on our now-defunct blog on July 15, 2015.注意&#xff1a;該文章最初于2015年7月15日發布在…

5.7和5.6的mysql_mysql5.6和5.7的區別

展開全部MySQL 5.7 已經開發兩年了。相比 MySQL 5.6&#xff0c;有特別多的改進。團隊主要關注速度&#xff0c;性能據報告是比之前62616964757a686964616fe4b893e5b19e31333365643661版本提升了 2 至 3 倍。新特性列表&#xff0c;主要改進&#xff1a;提升 MySQL 安全性改進了…

01:數制轉換

01:數制轉換 查看提交統計提問總時間限制: 1000ms內存限制: 65536kB描述求任意兩個不同進制非負整數的轉換&#xff08;2進制&#xff5e;16進制&#xff09;&#xff0c;所給整數在long所能表達的范圍之內。不同進制的表示符號為&#xff08;0&#xff0c;1&#xff0c;...&am…