国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java Set集合去重的原理及實現

Java Set集合去重的原理及實現

2020-09-09 00:20崔笑顏 Java教程

這篇文章主要介紹了Java Set集合去重的原理及實現,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下

在開發中經常使用到Set集合去重,那么去重的原理是怎樣實現的呢?在此文章記錄一下去重原理!!!

下面是set集合類圖

Java Set集合去重的原理及實現

下面我們來跟蹤一下執行過程;

首先我們實例化一個Set對象;

?
1
2
Set<8大基本類型> set = new HashSet<8大基本類型>();
set.add(8大基本類型);

add操作會調用HashMap中的add方法;

?
1
2
3
public boolean add(E e) {
    return map.put(e, PRESENT)==null;
    }

HashMap中的add方法依賴了HashMap的put方法;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public V put(K key, V value) {
    if (key == null)
      return putForNullKey(value);
    int hash = hash(key.hashCode());
    int i = indexFor(hash, table.length);
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {//每添加一個,則循環判斷是否與map中的元素相等
      Object k;
      // 先判斷hashcode是否一致,然后再判斷值是否相等
      if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
        V oldValue = e.value;
        e.value = value;
        e.recordAccess(this);
        return oldValue;
      }
    }
 
    modCount++;
    addEntry(hash, key, value, i);
    return null;
  }

但是上述方法只對基本數據類型有效,下面是應用到復雜對象的講解。
下面就是重寫對象User的實現,重寫equals和hashCode方法;

測試類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class User {
  //id
  protected Integer id;
  //username
  protected String username;
 
  //構造方法
  public User(int id,String username){
    this.id = id;
    this.username = username;
  }
 
  /**
   * 如果對象是USER,先比較hashcode,一致的場合在比價每個屬性的值
   */
  @Override
  public boolean equals(Object obj) {
    if(obj == null)
      return false;
    if(this == obj)
      return true;
    if(obj instanceof User){
      User user = (User) obj;
      //if(user.id == this.id) return true; //只比較id
      //比較id和username 一致時才返回true,之后再去比較hashCode
      if(user.id == this.id && user.username.equals(this.username)){
        return true;
      }
    }
    return false;
  }
 
  /**
   *
   * 重寫hashCode方法,返回的hashCode不一樣 才認為是不一樣的對象;
   */
  @Override
  public int hashCode() {
    //return id.hashCode(); 只比較id,id不一樣就添加進集合;
    return id.hashCode() * username.hashCode();
  }
}

實現類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.HashSet;
import java.util.Set;
 
public class test {
  public static void main(String[] args){
    User user1 = new User(1,"xiaoqiang");
    User user2 = new User(2,"xiaoqiang");
    User user3 = new User(1,"xiaoqiang");
    User user4 = new User(1,"xiaoqiang");
 
    Set<User> set = new HashSet<User>();
    set.add(user1);
    set.add(user2);
    set.add(user3);
    set.add(user4);
    for(User u : set){
      System.out.println("id:" + u.id +" username:"+ u.username);
    }
  }
}

輸出結果

id:2 username:xiaoqiang
id:1 username:xiaoqiang

以上就是Java Set集合去重的原理及實現的詳細內容,更多關于Java Set集合去重的資料請關注服務器之家其它相關文章!

原文鏈接:https://cloud.tencent.com/developer/article/1649007

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 91夜夜夜| 91精品国产乱码久久久久久久久 | 国产精品视频 | 深夜影院深a | 依依成人综合网 | 日韩精品在线免费视频 | 久久久精品影院 | 久久久久久久久99精品 | 高清一区二区三区 | 日韩精品一区二区三区在线观看 | 欧美精品久久久久 | 国产精品二区一区二区aⅴ污介绍 | 91精品国产综合久久久久久 | 免费在线看a | 黄视频在线播放 | 日韩精品一区二区三区 | 成年人免费在线观看网站 | 一区欧美| 国产美女一区二区 | 久久久久久网站 | 一特黄a大片免费视频 视频 | 精品一区二区三区四区五区 | 91视频8mav| 欧美大片免费高清观看 | 精品国产乱码久久久久久影片 | 一区二区三区成人 | 国产精品美女久久久久久久网站 | 久久中国精品 | 国产精品美女在线观看 | 欧美视频免费在线 | 免费在线观看黄视频 | 欧美一级二级视频 | 免费观看一区二区三区毛片 | 天堂中文av| 18.wxww.成人性视频高清 | 亚洲综合日韩 | 黄网站涩免费蜜桃网站 | 国产一区二区精品 | 日韩免费视频 | 国产精品区一区二区三区 | 亚洲成人一区二区 |