建体彩网|中彩网双色球连号|
?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

金沙貴賓官網下載:JAVA提高教程(2)認識Set集合之HashSet

?

聚攏在Java里面的感化不凡,我們常用的有Set,List和Map三種,我們先認識一下Set,分外是HashSet的應用

package collection.lession2;

import java.util.HashSet;

import java.util.Set;

/**

* 老紫竹JAVA前進教程(2)-熟識Set聚攏之HashSet。

* Set用來保存不容許重復的數據。可所以任何工具類型。

* JDK5今后,主類型可以經由過程autobox 放入Set里面。

*

* @author 老紫竹

*

*/

public class Lession2 {

public static void main(String[] args) {

// 通俗測試

testNormal();

// 測試HashSet的特殊性

testForHashSet();

testForHashSet2();

}

/**

* 測試保存混雜類型的數據.

*/

public static void testNormal() {

System.out.println("---金沙貴賓官網下載-- testNormal -----------");

// Set有多個實現,我們先看看最常用的HashSet

Set set = new HashSet();

// 添加一個字符串

set.add("字符串");

// 添加一個整數工具

set.add(new Integer(1));

// 使用JDK5的特點,增添一個浮點數

set金沙貴賓官網下載.add(123.45);

// 我們看看聚攏里工具的數量

System.out.println(set.size());

// 我們考試測驗增添一個重復的字符串

set.add("字符串");

// 我們再次看看聚攏里工具的數量

System.out.println(set.size());

// 我們來測試看看是否聚攏里包孕了某個數據

System.out.println(set.contains(123.45));

// 我們從里面把這個浮點數刪除

set.remove(123.45);

// 我們再次看看聚攏里工具的數量

System.out.println(set.size());

}

/**

* 專門針對HashSet的測試。

*/

public static void testForHashSet() {

System.out.println("----- testForHashSet -----------");

HashSet set = new HashSet();

// 增添一個null工具

set.add(null);

// 我們再次看看聚攏里工具的數量

System.out.println(set.size());

// 再次增添一個null看看

set.add(null);

// 我們再次看看聚攏里工具的數量

System.out.println(set.size());

MyObject obj = new MyObject("java2000", 2);

set.add(obj);

obj = new MyObject("csdn", 10);

set.add(obj);

// 我們再次看看聚攏里工具的數量

System.out.println(set.size());

// 判斷是否包孕某個工具

System.out.println(set.contains(obj));

obj = new MyObject("java2000_net",金沙貴賓官網下載 2);

set.add(obj);

// 我們再次看看聚攏里工具的數量

System.out.println(set.size());

// 我們考試測驗把obj再次放入set看看

// 并沒有增添,由于是重復的

set.add(obj);

System.out.println(set.size());

// 我們構造一個新的工具,內容和前面的相同

obj = new MyObject("java2000_net", 2);

set.add(obj);

System.out.print金沙貴賓官網下載ln(set.size());

// 我們改動一下obj里面的年歲,再看看

obj.setAge(3);

// 我們再測試看看是否包孕此工具。

// 請留意,我們這個obj和前面的obj是同一個工具

// 我們僅僅改動了一下我們的年歲

System.out.println(set.contains(obj));

// 我們考試測驗把obj再次放入set看看

// 我們又增添了長度

set.add(obj);

System.out.println(set.size());

}

/**

* 專門針對HashSet的測試2。

*/

public static void testForHashSet2() {

System.out.println("----- testForHashSet2 -----------");

HashSet set = new HashSet();

MyObject2 obj = null;

for (int i = 0; i < 3; i++) {

obj = new MyObject2("java2000" + i, i);

set.add(obj);

System.out.println(set.size());

}

}

}

class MyObject {

private int age;

private String name;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

MyObject(String name, int age) {

this.name = name;

this.age = age;

}

public boolean equals(Object obj) {

System.out.println("equals");

if (obj == null || !(obj instanceof MyObject)) {

return false;

}

MyObject o = (MyObject) obj;

return this.age == o.age && this.name.equals(o.name);

}

public int hashCode() {

int hashCode = name.hashCode() + String.valueOf(age).hashCode();

return hashCode;

}

}

class MyObject2 {

private int age;

private String name;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

MyObject2(String name, int age) {

this.name = name;

this.age = age;

}

public boolean equals(Object obj) {

System.out.println("equals");

if (obj == null || !(obj instanceof MyObject2)) {

return false;

}

MyObject2 o = (MyObject2) obj;

return this.age == o.age && this.name.equals(o.name);

}

public int hashCode() {

return 1;

}

}

class MyObject3 {

private int age;

private String name;

// 金沙貴賓官網下載采納一個變量進行節制

// 一旦天生了hashCode,則不再更改

private int HASHCODE = Integer.MIN_VALUE;

public int hashCode() {

if (HASHCODE == Integer.MIN_VALUE) {

// 從新生資源類的hashCode

HASHCODE = name.hashCode() + String.valueOf(age).hashCode();

}

return HASHCODE;

}

}

闡明,針對HashSet:

Set不容許重復

容許 null,重復的null只算一個

判斷是否存在一個數據(是否重復),先判斷其hashCode是否存在,若存在再逐個判斷hashCode相同的數據是否相等

判斷是否相等,除了hashCode相等外,還要判斷工具引用相等(==),或者 equals

假如一個工具的hashCode更改了,會造成找不到這個工具,也就呈現了內存透露的危險。

hashCode 措施是HashSet里面工具的關鍵,它的算法影響到了數據的分散和查找效率。某個確認工具的hashCode不應該更改,避免呈現內存透露,可以采納如下措施,來要領屬性變更造成hashCode變更

class MyObject3 {

private int age;

private String name;

// 采納一個變量進行節制

// 一旦天生了hashCode,則不再更改

private int HASHCODE = Integer.MIN_VALUE;

public int hashCode() {

if (HASHCODE == Integer.MIN_VALUE) {

// 從新生資源類的hashCode

HASHCODE = name.hashCode() + String.valueOf(age).hashCode();

}

return HASHCODE;

}

}

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

建体彩网
微信麻将哪个好玩 综艺节目收视率如何赚钱 南粤风采36选7号码预测 麻将游戏作弊器 黄金岛棋牌游戏下载 福彩18选7带坐标走势图 真钱 淘宝天猫优惠券群能赚钱吗 广西十一选五开奖 东方红彩票安全吗