java中的集合之Hashset集合

編程語言 Java 技術 二環十三郎 2017-03-28

Hashset

Set 如果是實現了Set接口的集合類,具備的特點: 無序,不可重複。 * 無序: 添加元素 的順序與元素出來的順序是不一致 的。 *hashSet的實現原理:往Haset添加元素的時候,HashSet會先調用元素的hashCode方法得到元素的哈希值 ,然後通過元素 的哈希值經過移位等運算,就可以算出該元素在哈希表中 的存儲位置。情況1: 如果算出元素存儲的位置目前沒有任何元素存儲,那麼該元素可以直接存儲到該位置上。情況2: 如果算出該元素的存儲位置目前已經存在有其他的元素了,那麼會調用該元素的equals方法與該位置的元素再比較一次,如果equals返回的是true,那麼該元素與這個位置上的元素就視為重複元素,不允許添加,如果equals方法返回的是false,那麼該元素運行 添加。 */publicclass Set01 {publicstaticvoid main(String[] args) {Set set = newHashSet();set.add("張三");set.add("王二");set.add("李二");System.out.println(set.add("李二"));//返回的是faaseIterator it = set.iterator();while(it.hasNext()){System.out.println(it.next());}Set<Dog> set1 = new HashSet<Dog>();set1.add(new Dog("狗娃",23));set1.add(new Dog("狗勝",25));set1.add(new Dog("狗孫",29));System.out.println(set1.add(new Dog("狗娃",23)));}}class Dog{String name;intage;public Dog(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return"[年齡:"+this.age+","+"姓名:"+this.name;}/* (non-Javadoc) * @see java.lang.Object#hashCode() */@Overridepublicint hashCode() {returnthis.age;}@Overridepublicboolean equals(Object obj) {Dog dog = (Dog)obj;returnthis.age==dog.age;}}

相關推薦

推薦中...