下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

JAVA程序员提高教程(2)-认识Set集合之HashSet

作者:课课家教育     来源: http://www.kokojia.com点击数:682发布时间: 2016-02-01 14:19:59

标签: java课程标准21天学通javajava学习课程

大神带你学编程,欢迎选课

  集合在java里面的作用非凡,我们常用的有Set,List和Map三种,我们先熟悉一下Set ,特别是HashSet的使用

  package collection.lession2;

  import java.util.HashSet;

  import java.util.Set;

JAVA程序员提高教程(2)-认识Set集合之HashSet_java课程标准_java入门_课课家

  /**

  * Set用来保存不允许重复的数据。可以是任何对象类型。

  * JDk5以后,主类型可以通过autobox 放入Set里面。

  *

  *

  */

  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.println(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;

  }

  }

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程