import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
//使用HashSet存储字符串并遍历
/*Set集合的特点:
无序存放(存储和读取的顺序有可能不一样)
没有索引和list不同
不允许元素重复(元素是惟一的)*/
public class HashSetDemo {
public static void main(String[] args) {
//创建集合对象
//HashSet<String> hs = new HashSet<String>();
Set<String> set = new HashSet<String>();//父类接口引用指向子类对象,因为接口不能实例化所以后面必须跟new HashSet
//不过需要注意的是,如果使用父类的引用去指向子类的对象,那就没办法去使用子类成员的方法。
//添加集合元素
set.add("Hello");
set.add("World");
//集合转成数组,然后遍历集合对象
/*Object[] obj = set.toArray();
for(int x=0;x<obj.length;x++){
System.out.println(obj[x]);
}*/
//迭代器遍历集合
/*Iterator<String> it = set.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}*/
//增强for遍历
for(String s:set){
System.out.println(s);
}
}
}
2.使用HashSet存储自定义对象并遍历:
package set_day01;
//使用HashSet存储自定义对象并遍历
//存储的自定义对象无法去重,所以下面重写了equals方法和HashCode方法
/*HashSet的add()方法不能去重的原因:
* 1.通过查找源码发现,HashSet的add方法,首先会使用当前集合的每一个元素
* 和新添加的元素进行hash值(也可以说是地址值的比较),如果hash值不一样,则直接添加新的元素。
* 2.如果hash值一样,则进行比较地址值或者使用equals方法进行其他东西的比较,
* 所有东西的比较结果都不一样,则添加元素。
* 实现HashSet存储自定义对象并去重的步骤
* 第一步:重写hashCode方法,默认返回相等,先比较hash值,如果相等
* 则进行第二步,执行equals方法
* 第二步:重些equals方法,默认返回true,即说明两个元素是相等的
* 不予以添加。
*
*/
import java.util.HashSet;
public class HashSetDemo2 {
public static void main(String[] args) {
//创建集合对象
HashSet<Student> hs = new HashSet<Student>();
//创建元素对象
Student s = new Student("liqianqian",18);
Student s2 = new Student("fanhaolan",18);
Student s3 = new Student("fanhaolan",18);
//添加元素对象
hs.add(s);
hs.add(s2);
hs.add(s3);
//遍历集合对象,使用增强for
for (Student student : hs) {
System.out.println(student);
}
}
}
class Student{
String name;
int age;
public Student(String name,int age){
this.name=name;
this.age=age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public boolean equals(Object obj) {
Student s = (Student) obj;//向下转型,可以获取子类特有成员
//比较年龄是否相等,如果不相等,返回false
if(this.age !=s.age){
return false;
}
//比较姓名是否相等,如果相等返回false
if(!(this.name).equals(s.name)){
return false;
}
//默认返回true,说明两个学生时相等的
return true;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return 1;
}
}
网友评论