Set中的元素无序,不可重复。
Set去重复的原理是使用了Hash表。
案例1:使用Scanner从键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符
* aaaabbbcccddd * 输出abcd
*
输
入的字符串要先转成入字符数组,逐个遍历放入HashSet中。
示例2:去除集合中的重复元素
1.获取ArrayList,添加元素。把list中添加的元素取出来。
2.把取出来的元素放入HashSet中,清空list集合
3.把HashSet中的元素放入list中。
添加比较器的三种写法:(记得写泛型)
第一种
public class Person implements Comparable {
private String name;
private int age;
public Person() {
}
public Person(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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public int compareTo(Person o) {
if(o.getName().equals(this.getName())){
return 0;//set去重
}
int i = o.getAge()-this.getAge();
return i;
//return o.getName().equals(this.getName()) ? 0:this.getAge()-o.getAge(); //三元运算符写法
}
}
第二种和第三种:内部类写法和匿名内部类
public class TreeSetTest {
public static void main(String[] args) {
Set set = new TreeSet<>(new Comparator() {
@Override
public int compare(Person o1, Person o2) {
return o1.getName().equals(o2.getName()) ? 0 : o2.getAge()-o1.getAge();
}
});
set.add(new Person(“james”,34));
set.add(new Person(“harden”,30));
set.add(new Person(“wade”,33));
for (Person person : set) {
System.out.println(person);
}
}
}
class Demo1 implements Comparator {
@Override
public int compare(Person o1, Person o2) {
return o1.getName().equals(o2.getName()) ? 0 : o2.getAge()-o1.getAge();
}
}