日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

最优的去重处理——HashSet去重

發布時間:2023/11/28 生活经验 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最优的去重处理——HashSet去重 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算法與數據結構是密不可分的,我們使用不同的數據結構和算法的組合就是我們解決問題的答案。
本篇我將就HashSet的特性和使用進行介紹。

HashSet有哪些特性呢?

HashSet繼承了Set接口,Set接口有如下特性:

1.元素的無序性 != 隨機性。真正的無序性,是指元素在底層存儲的位置是無序的。

2.不可重復性。當向Set集合中添加相同元素的時候,后面的這個添加不進去。程序不會報錯!

3.Set集合沒有自己獨有的方法,它的方法都是繼承于Collection接口中的現有方法

4.HashSet類是非線程安全的

5.允許集合元素值為null

而我們要講的就是他的不可重復性,它的不可重復性是如何保證的呢?

當向Set中添加對象時,會先調用此對象所在類的hashCode()方法,計算此對象對應的哈希值,此哈希值決定了此對象在Set中的存儲位置,如果此位置之前沒有對象存儲,則此對象直接存儲在這個位置上。反之,如果此位置之前已經有對象存儲,再通過equals()方法比較這兩個對象是否相同,equals()方法返回true,說明為同一個對象,那么這個對象就不會被添加進來。


在力扣上有一道非常簡單的題目,可以幫助我們很好的理解和使用HashSet 👇

力扣解題 575 分糖果

題目:給定一個偶數長度的數組,其中不同的數字代表著不同種類的糖果,每一個數字代表一個糖果。你需要把這些糖果平均分給一個弟弟和一個妹妹。返回妹妹可以獲得的最大糖果的種類數。

示例 1:
輸入: candies = [1,1,2,2,3,3]
輸出: 3
解析: 一共有三種種類的糖果,每一種都有兩個。
最優分配方案:妹妹獲得[1,2,3],弟弟也獲得[1,2,3]。這樣使妹妹獲得糖果的種類數最多。

示例 2 :
輸入: candies = [1,1,2,3]
輸出: 2
解析: 妹妹獲得糖果[2,3],弟弟獲得糖果[1,1],妹妹有兩種不同的糖果,弟弟只有一種。這樣使得妹妹可以獲得的糖果種類數最多。

注意:

  1. 數組的長度為[2, 10,000],并且確定為偶數。
  2. 數組中數字的大小在范圍[-100,000, 100,000]內。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/distribute-candies

public class _575_分糖果 {public static int distributeCandies(int[] candies) {//HashSet 去重最好的工具HashSet<Integer> set = new HashSet<Integer>();//遍歷數組,將數組中的元素添加至set中(重復則覆蓋)for (int candy : candies) {set.add(candy);}//判斷最后整個set中擁有的糖果種類數量和分到手中的糖果數量相比較返回小值return Math.min(set.size(), candies.length / 2);}//testpublic static void main(String[] args) {int [] a = {1,1,2,2,3,3};System.out.println(distributeCandies(a));}}

以上!

總結

以上是生活随笔為你收集整理的最优的去重处理——HashSet去重的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。