Java集合(二)HashSet的使用
2016-03-25 14:22
633 查看
HashSet和TreeSet都实现了Collection下的Set接口,他们实现的原理分别是HashMap和TreeMap,基本的数据结构是哈希表和Red-Black Tree
package com.pason.hashset;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo {
public static void main(String[] args) {
HashSet<Student> student = new HashSet<Student>();
Student stu1 = new Student("Pason",123);
Student stu2 = new Student("Wade",456);
Student stu3 = new Student("Lee",789);
Student stu4 = new Student("Wong",123);
student.add(stu1);
student.add(stu2);
student.add(stu3);
student.add(stu4);
System.out.println(student.size());
//打印的都是Student对象的toString()方法
System.out.println("======================");
//forEach方法遍历
for (Student s: student)
System.out.println(s);
System.out.println("======================");
//直接打印hashSet对象
System.out.println(student);
System.out.println("======================");
//迭代器
Iterator<Student> stu = student.iterator();
while(stu.hasNext()){
System.out.println(stu.next());
}
System.out.println("======================");
//加入重复元素发现对象加不进去
student.add(stu3);
System.out.println(student);
//如何定义对象是否重复呢?
//需要重写equals()和hashCode()方法,一般在Eclipse中
//自动根据类中字段属性重写
//现在重写Student中的equals()和hashCode()方法
//仅根据id判断是否一致,这样stu4因为与stu1的id一致,所以只加入了3个
//如果修改某个hashset中元素的能够决定hashcode和equals()的因素,那么修改后该元素无法移除
//原因和HashMap有关
stu3.setId(111);
student.remove(stu3);
System.out.println("======================");
System.out.println(student);
System.out.println("发现无法移除,但该改变可见!");
}
}
package com.pason.hashset;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo {
public static void main(String[] args) {
HashSet<Student> student = new HashSet<Student>();
Student stu1 = new Student("Pason",123);
Student stu2 = new Student("Wade",456);
Student stu3 = new Student("Lee",789);
Student stu4 = new Student("Wong",123);
student.add(stu1);
student.add(stu2);
student.add(stu3);
student.add(stu4);
System.out.println(student.size());
//打印的都是Student对象的toString()方法
System.out.println("======================");
//forEach方法遍历
for (Student s: student)
System.out.println(s);
System.out.println("======================");
//直接打印hashSet对象
System.out.println(student);
System.out.println("======================");
//迭代器
Iterator<Student> stu = student.iterator();
while(stu.hasNext()){
System.out.println(stu.next());
}
System.out.println("======================");
//加入重复元素发现对象加不进去
student.add(stu3);
System.out.println(student);
//如何定义对象是否重复呢?
//需要重写equals()和hashCode()方法,一般在Eclipse中
//自动根据类中字段属性重写
//现在重写Student中的equals()和hashCode()方法
//仅根据id判断是否一致,这样stu4因为与stu1的id一致,所以只加入了3个
//如果修改某个hashset中元素的能够决定hashcode和equals()的因素,那么修改后该元素无法移除
//原因和HashMap有关
stu3.setId(111);
student.remove(stu3);
System.out.println("======================");
System.out.println(student);
System.out.println("发现无法移除,但该改变可见!");
}
}
package com.pason.hashset; public class Student { private String name; private int id; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String toString() { return "Student [name=" + name + ", id=" + id + "]"; } public Student(String name, int id) { super(); this.name = name; this.id = id; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (id != other.id) return false; return true; } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树