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}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)