Java之路---Day19(set介面)

来源:https://www.cnblogs.com/hpcz190911/archive/2019/11/08/11817261.html
-Advertisement-
Play Games

set介面 java.util.Set 介面和 java.util.List 介面一樣,同樣繼承自 Collection 介面,它與 Collection 介面中的方 法基本一致,但是set介面中元素無序,並且不重覆 分類 1.HashSet集合 2.LinkedHashSet集合 HashSet集 ...


set介面

  java.util.Set 介面和 java.util.List 介面一樣,同樣繼承自 Collection 介面,它與 Collection 介面中的方 法基本一致,但是set介面中元素無序,並且不重覆

  分類

    1.HashSet集合

    2.LinkedHashSet集合

HashSet集合:

  java.util.HashSet 是 Set 介面的一個實現類,它所存儲的元素是不可重覆的,並且元素都是無序的(即存取順序 不一致)

 1 package demosummary.set;
 2 
 3 import java.util.HashSet;
 4 
 5 public class HashSetTest01 {
 6     public static void main(String[] args) {
 7         //創建set集合
 8         HashSet<String> set = new HashSet<>();
 9         //添加元素
10         set.add("德瑪");
11         set.add("德邦");
12         set.add("皇子");
13         set.add("劍聖");
14         set.add("德瑪");
15         System.out.println(set);//[德邦, 皇子, 德瑪, 劍聖]//元素不允許重覆,且無序
16         //遍歷集合
17         for (String s : set) {
18             System.out.println(s);
19         }
20     }
21 }

  HashSet 是根據對象的哈希值來確定元素在集合中的存儲位置,因此具有良好的存取和查找性能。保證元素唯一性 的方式依賴於: hashCode 與 equals 方法

HashSet集合存儲數據的結構(哈希表)

  哈希表是由數組+鏈表+紅黑樹(JDK1.8增加了紅黑樹部分)實現的,如下圖所示

  

  

HashSet存儲自定義類型元素

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

 1 package demosummary.set;
 2 
 3 import java.util.Objects;
 4 
 5 public class SetPerson {
 6     private String name;
 7     private int age;
 8 
 9     public SetPerson() {
10     }
11 
12     public SetPerson(String name, int age) {
13         this.name = name;
14         this.age = age;
15     }
16 
17     public String getName() {
18         return name;
19     }
20 
21     public void setName(String name) {
22         this.name = name;
23     }
24 
25     public int getAge() {
26         return age;
27     }
28 
29     public void setAge(int age) {
30         this.age = age;
31     }
32 
33     @Override
34     public boolean equals(Object o) {
35         if (this == o) return true;
36         if (o == null || getClass() != o.getClass()) return false;
37         SetPerson setPerson = (SetPerson) o;
38         return age == setPerson.age &&
39                 Objects.equals(name, setPerson.name);
40     }
41 
42     @Override
43     public int hashCode() {
44         return Objects.hash(name, age);
45     }
46 
47     @Override
48     public String toString() {
49         return "SetPerson{" +
50                 "name='" + name + '\'' +
51                 ", age=" + age +
52                 '}';
53     }
54 }
 1 package demosummary.set;
 2 
 3 import java.util.HashSet;
 4 
 5 public class SetPersonTest {
 6     public static void main(String[] args) {
 7         //創建set集合
 8         HashSet<SetPerson> sp = new HashSet<>();
 9         //添加元素
10         SetPerson setPerson = new SetPerson("德瑪",18);
11         sp.add(setPerson);
12         sp.add(new SetPerson("德邦", 19));
13         sp.add(new SetPerson("皇子", 20));
14         sp.add(new SetPerson("劍聖", 19));
15         //遍歷set集合
16         for (SetPerson person : sp) {
17             System.out.println(person);
18         }
19         /**
20          * 執行結果
21          * SetPerson{name='皇子', age=20}
22          * SetPerson{name='德瑪', age=18}
23          * SetPerson{name='德邦', age=19}
24          * SetPerson{name='劍聖', age=19}
25          */
26     }
27 }

LinkedHashSet

  HashSet的一個子類 java.util.LinkedHashSet ,它是鏈表和哈希表組合的一個數據存儲結構,保證取出元素是有序的

 1 package demosummary.set;
 2 
 3         import java.util.Iterator;
 4         import java.util.LinkedHashSet;
 5         import java.util.LinkedList;
 6 
 7 public class LinkedHashSetTest01 {
 8     public static void main(String[] args) {
 9         //創建LinkedList集合
10         LinkedHashSet<String> set = new LinkedHashSet<>();
11         //添加元素
12         set.add("劍聖");
13         set.add("德瑪");
14         set.add("皇子");
15         set.add("德邦");
16         //迭代器輸出結果
17         Iterator<String> iterator = set.iterator();
18         while (iterator.hasNext()) {
19             System.out.println(iterator.next());
20         }
21         /**
22          * 輸出結果
23          * 劍聖
24          * 德瑪
25          * 皇子
26          * 德邦
27          */
28     }
29 }

可變參數

  如果我們定義一個方法需要接受多個參數,並且多個參數類型一致,我們可以對其簡化成如下格 式:

  修飾符 返回值類型 方法名(參數類型... 形參名){  }

  等價於

  修飾符 返回值類型 方法名(參數類型[] 形參名){  }

 1 package demosummary.set;
 2 
 3 public class SetTest {
 4     public static void main(String[] args) {
 5         //定義一個數組
 6         int[] arr = {1,5,8,66,88,345};
 7         //定義一個結果並賦值
 8         int sum = getSum(arr);//調用方法並給sum賦值
 9         //輸出結果
10         System.out.println(sum);
11     }
12 
13     /**
14      * 完成數組  所有元素的求和 原始寫法
15      * public static int getSum(int[] arr){
16      *      int sum = 0;
17      *      for(int a : arr){
18      *          sum += a;
19      *      }
20      *      return sum;
21      * }
22      */
23     //可變參數寫法
24     public static int getSum(int[] arr){
25         //定義一個sum參數
26         int sum = 0;
27         //增強for
28         for (int i : arr) {
29             //得出結果
30             sum += i;
31         }
32         //返回結果
33         return sum;
34     }
35 }

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • css 位移常用屬性 transform:translate(x,y); transform:translateX(); transform:translateY(); 旋轉屬性 2d旋轉: transform:rotate(); / 繞著中心點轉動 / transform:rotateX(); / ...
  • 起因 為什麼做這個東西,是突然間聽一後端同事說起 "Annie" 這個東西,發現這個東西下載視頻挺方便的,會自動爬取網頁中的視頻,然後整理成列表。發現用命令執行之後是下麵的樣子: 心裡琢磨了下,整一個界面玩一下吧。然後就做成下麵這個樣子了。 列表 下載列表 本文地址倉庫: "https://gith ...
  • 前幾天記錄了一下表單生成器(Form Builder)之表單數據存儲結構mongodb篇,之後便想著偽造一些數據。為什麼要偽造數據呢?說來慚愧,因為拖拉拽設計表單以及表單對應的列表的PC端和移動端該顯示哪些欄位並且是否支持搜索列印(即表單的列表配置)等一系列配置都還沒有做,還有就是前面只說了表單相關 ...
  • 在學習ssh時,一定有不少人對公鑰和私鑰產生過不解。在搜索公鑰跟私鑰的理解時,發現了這篇有趣的圖解小文章,與大家共用。 1. 鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。 2. 鮑勃把公鑰送給他的朋友們 帕蒂、道格、蘇珊 每人一把。 3. 蘇珊要給鮑勃寫一封保密的信。她寫完後用鮑勃的公鑰加密,就可以達 ...
  • 最近寫一個需求時遇到一個問題,用戶需要通過點擊一個按鈕直接讀取他自己電腦上D盤的一個txt文件內容顯示到頁面,因為項目現在是用ZK寫的.我對於ZK也是剛剛瞭解不就,很多都還不是很熟.起初我是想用io流去讀取,然後寫完發現,這樣每次讀取的都是伺服器上的D盤下的txt文件,所以在網上找了很久.很多都是獲 ...
  • 場景 Ubuntu Server 16.04 LTS上怎樣安裝下載安裝Nginx並啟動: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102828075 Nginx的配置文件位置以及組成部分結構講解: https://blog. ...
  • 文章主人公:小明,就職於某互聯網公司,從事後端開發工作。最近小明收到通知公司需要開發一款《證件照》應用,需要徵集架構方案,主要功能包括: 小明雖然從事後端開發工作,但是一直很關註架構這方面的知識,以往都是開發大佬們架構好的應用現在有機會自己去實踐下,打算把自己學到的知識應用於實際案例中來。 小明的腦 ...
  • Python win32com模塊 合併文件夾內多個docx文件為一個docx #!/usr/bin/env python # -*- coding: utf-8 -*- from win32com.client import Dispatch import os,sys #import panda ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...