JAVA 二十三 集合SET
标签: JAVA
hashSet
- hashSet:底层的数据结构是 哈希表
- hashSet通过hashcode 和 equals方法判断
- 如果元素的hashcode值相同,判断equals方法
- 如果元素的hashcode值不同,不会判断equals方法
import java.util.HashSet;
import java.util.TreeSet;
/*
* Set:无序 唯一
* hashSet:底层的数据结构是 哈希表
* hashSet通过hashcode 和 equals方法判断
* 如果元素的hashcode值相同,判断equals方法
* 如果元素的hashcode值不同,不会判断equals方法
* TreeSet:底层的数据结构是二叉树
* 根据compareTo()方法保证数据的唯一性
* 第一种方式: 让元素自身具备 比较性 实现compareable接口,重写 compareTo()方法,该方法返回值是0时认为是同一个对象
* 第二种方式: 当元素自身不能实现compareable接口时,需要集合自身具有比较性,需要自定义类实现Comparator接口,覆盖compare方法
*
*/
public class HashSetDemo {
public static void main(String[] args){
HashSet<String> set1 = new HashSet<String>();
set1.add("java01");
set1.add("java02");
set1.add("java03");
System.out.println(set1.add("java02"));
System.out.println(set1);
HashSet<Student> set2 = new HashSet<Student>();
System.out.println(set2.add(new Student("aa",20)));
System.out.println(set2.add(new Student("cc",21)));
System.out.println(set2.add(new Student("dd",21)));
System.out.println(set2.add(new Student("aa",20)));
System.out.println(set2.add(new Student("aa",20)));
System.out.println(set2);
TreeSet<YuanG> set3 = new TreeSet<YuanG>(new MyComparator());
set3.add(new YuanG("AA",18));
set3.add(new YuanG("BB",25));
set3.add(new YuanG("BB",25));
set3.add(new YuanG("CC",55));
set3.add(new YuanG("boss",22));
set3.add(new YuanG("boss",22));
System.out.println(set3);
TreeSet<Student> set4 = new TreeSet<Student>();
set4.add(new Student("aa",1111));
set4.add(new Student("bb",1111));
set4.add(new Student("cc",1111));
set4.add(new Student("aa",1111));
System.out.println(set4);
}
}
TreeSet
- TreeSet:底层的数据结构是二叉树
- 根据compareTo()方法保证数据的唯一性
- 第一种方式: 让元素自身具备 比较性 实现compareable接口,重写 compareTo()方法,该方法返回值是0时认为是同一个对象
- 第二种方式: 当元素自身不能实现compareable接口时,需要集合自身具有比较性,需要自定义类实现Comparator接口,覆盖compare方法
student类
public class Student implements Comparable<Student>{
private String name;
private int age;
public Student(String name,int age){
this.setName(name);
this.setAge(age);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return this.name+"|"+this.age;
}
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
// if(obj instanceof Student){
// Student stu=(Student)obj;
// return this.name.equals(stu.name) && this.age==stu.age;
// }else{
// return false;
// }
return false;
}
public int hashCode(){
return age+name.hashCode();
}
@Override
public int compareTo(Student o) {
// TODO Auto-generated method stub
if(name.compareTo(o.name)==0){
return age-o.age;
}else{
return name.compareTo(o.name);
}
}
}
YuanG类
public class YuanG {
private String name;
private int age;
public YuanG(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "名字"+name+"|年龄"+age+"";
}
}
MyComparator类
import java.util.Comparator;
public class MyComparator implements Comparator<YuanG>{
@Override
public int compare(YuanG o1, YuanG o2) {
// TODO Auto-generated method stub
if(o1.getAge()==o2.getAge()){
return o1.getName().compareTo(o2.getName());
}else{
return o1.getAge()-o2.getAge();
}
}
}