Set集合和實現類


1 HashSet是主要的實現類,Set中常用的方法都是Collection下定義的。

2 無序性:無序性!=隨機性。指元素在底層存儲的位置是無序的

   不可重復性:加入相同元素時,后面的元素不能加入進去

3 注意:要求加進Set中的元素,一定要重寫equals和hashCode方法

   才能保證Set中元素的不可重復性。

4 Set中元素如何存儲的?使用哈希算法,如同安排學生坐在教室的不同位置,元素存放在內存的不同位置。

5 當向Set中添加對象時,首先調用此對象所在類的hashCode(),計算此對象的哈希值,此哈希值決定了此對象在Set中的存儲位置。若此位置沒有對象存儲,則這個對象直接存儲在此位置,若此位置已有對象存儲,再通過equals()比較兩個對象是否相同,如果相同,后面的元素不能添加進來。

要求:hashcode()方法值與equals方法一致。

package lianxi2;

import java.util.HashSet;
import java.util.Set;

import org.junit.Test;

public class TestSet {
@Test
    public void test1(){
      Set set = new HashSet();
      set.add(23);
      set.add(55);
      set.add(new String("AA"));         //重寫了equals和hashcode方法
      set.add(new String("AA"));
      Student stu1 = new Student("001","xi");   //沒重寫時,用object的equals方法比較的是地址值
      Student stu2 = new Student("001","xi");  //重寫后,后面元素不能添加了
      System.out.println(stu1.hashCode());
      System.out.println(stu2.hashCode());
      set.add(stu1);
      set.add(stu2);
      System.out.println(set.size());
      System.out.print(set);
    }
}

結果:

1482401
1482401
4
[AA, 55, 23, Student [id=001, name=xi]]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM