1. 集合类总纲
2. HashSet 的使用
2.1 HashSet 构造与增加元素
- 集合中元素的储存空间是自动开辟的。
- 集合中元素是根据元素值和相应的哈希算法计算其地址,元素值相同,则地址相同。
- 所以 HashSet中不存在元素值重复的元素。
- 比如,HashSet 的存储就像夜晚的星星一样排列,无先后顺序。
HashSet hashset = new HashSet();
hashset.add("a");
hashset.add("a");
hashset.add(new Integer(1));
int[] a = {1, 2, 3, 4};
hashset.add(a);
MyHashSet mh = new MyHashSet();
hashset.add(mh);
2.2 遍历 HashSet 集合中的元素
- 集合中元素是依据元素值和相应的哈希算法计算其地址。
- 遍历集合,需要遍历算法(即使用迭代器)。
- Iterator
public static void practice1() {
HashSet<Integer> hashset = new HashSet<Integer>();
hashset.add(100);
hashset.add(55);
hashset.add(25);
hashset.add(10);
hashset.add(5);
Iterator<Integer> it = hashset.iterator();
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
}
100 5 55 25 10
2.3 删除 HashSet 中的元素
hashset.remove(Object);
hashset.clear();
2.4 判断是否包含某个元素 contains(Object)
@SuppressWarnings("removal")
public static void practice2() {
HashSet<Object> hashset = new HashSet<Object>();
hashset.add(new String("I love java"));
hashset.add(new Integer(100));
hashset.add(new Double(100.2));
hashset.add("a");
if (hashset.contains("I love java"))
System.out.println("集合中包含I love java");
else
System.out.println("集合中不包含I love java");
}
集合中包含I love java
3. HashSet集合类不能有重复元素的实例
3.1 加入了重复对象
package javaweb.collection;
import java.util.HashSet;
import java.util.Iterator;
public class Student {
String id, name;
int age;
public Student(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public String toString() {
return id + " " + name + " " + age;
}
public static void main(String[] args) {
HashSet<Student> hashset = new HashSet<Student>();
Student student1 = new Student("1001", "chen", 18);
Student student2 = new Student("1001", "chen", 18);
hashset.add(student1);
hashset.add(student2);
Iterator<Student> it = hashset.iterator();
while(it.hasNext()) {
System.out.println(it.next() + " ");
}
}
}
1001 chen 18
1001 chen 18
3.2 要重写 equals() 和 hashCode() 方法
package javaweb.collection;
import java.util.HashSet;
import java.util.Iterator;
public class Student {
String id, name;
int age;
public Student(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return id + " " + name + " " + age;
}
@Override
public boolean equals(Object obj) {
return id.equals(((Student) obj).id);
}
@Override
public int hashCode() {
return Integer.valueOf(id);
}
public static void main(String[] args) {
HashSet<Student> hashset = new HashSet<Student>();
Student student1 = new Student("1001", "chen", 18);
Student student2 = new Student("1001", "chen", 18);
hashset.add(student1);
hashset.add(student2);
Iterator<Student> it = hashset.iterator();
while (it.hasNext()) {
System.out.println(it.next() + " ");
}
}
}
1001 chen 18