1、结构
- Collection 接口 :单列集合,用来存储一个一个的对象
- ===Set 接口:存储无序不可重复的数据。
- ======HashSet:作为Set 接口的主要实现类,线程不安全,可存储null 数据。
- =========LikedHashSet:遍历其内部时可按添加顺序
- ======TreeSet:可按照添加元素指定属性排序
(底层用红黑树实现)
(1)、无序性:不等于随机。 存储的数据在底层数组中并非按照数组索引的顺序添加,而是根据数组的哈希值。
(2)、不可重复性
保证添加的元素按照equals() 判断时,不能返回true。相同元素只添加一个
2、代码查验学习
Person 类
package learn.clection;
public class Person {
private String name;
private String profession;
private int age;
//空参构造器
public Person() {
}
//全参构造器
public Person(String name, String profession, int age) {
this.name = name;
this.profession = profession;
this.age = age;
}
//获取名字
public String getName() {
return name;
}
//设置名字
public void setName(String name) {
this.name = name;
}
//获取职业
public String getProfession() {
return profession;
}
//设置职业
public void setProfession(String profession) {
this.profession = profession;
}
//获取年龄
public int getAge() {
return age;
}
//设置年龄
public void setAge(int age) {
this.age = age;
}
//重写equals
@Override
public boolean equals(Object o) {
System.out.println("使用equals()");
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return name.equals(person.name);
}
//重写toString()方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", profession='" + profession + '\'' +
", age=" + age +
'}';
}
}
User 类
package learn.clection;
public class User {
private String name;
private String profession;
private int age;
public User() {
}
public User(String name, String profession, int age) {
this.name = name;
this.profession = profession;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return name.equals(user.name);
}
@Override
public int hashCode() {
int result = name.hashCode();
result = 31 * result + profession.hashCode();
result = 31 * result + age;
return result;
}
}
单元测试
@Test
public void testSet(){
Set set1 = new HashSet();
set1.add(123);
set1.add(456);
set1.add("aa");
set1.add("BB");
set1.add(new Person());
//次处的两个类对应得两个对象的equals() 方法只比较 name
// 相同返回true
System.out.println("两个对象比较返回值为:");
Person person = new Person("Tom", "程序员", 26);
User user = new User("Tom", "程序员", 26);
System.out.println(person.equals(user));//true
set1.add(new Person("Tom","程序员",26));
set1.add(new User("Tom","程序员",26));
System.out.println("遍历的结果为:(可以看出两个对象只有一个存入set1)");
System.out.println("");
Iterator iterator = set1.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
运行结果
两个对象比较返回值为:
使用equals()
false
遍历的结果为:(可以看出两个对象只有一个存入set1)
aa
BB
learn.clection.User@3dbb3858
456
Person{name='Tom', profession='程序员', age=26}
123
Person{name='null', profession='null', age=0}