HashSet
1.使用HashSet主要用来去重
HashSet<String> set = new HashSet<>();
boolean b1 = set.add("d");
boolean b2 = set.add("d");
set.add("a");
set.add("b");
set.add("b");
set.add("c");
System.out.println(b1);
System.out.println(b2);
System.out.println(set);
2.引用数据类型去重
HashSet<Person> set = new HashSet<>();
set.add(new Person("鹏", 16));
set.add(new Person("鹏", 16));
set.add(new Person("水", 17));
set.add(new Person("水", 17));
set.add(new Person("茜", 18));
set.add(new Person("茜", 18));
for (Person person : set) {
System.out.println(person);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
LinkedHashSet
1.
LinkedHashSet<String> set = new LinkedHashSet<>();
set.add("l");
set.add("w");
set.add("w");
set.add("a");
set.add("n");
set.add("g");
System.out.println(set);
2.
LinkedHashSet<Integer> set = new LinkedHashSet<>();
while (set.size() < 10) {
int num = (int)(Math.random() * (20 - 1 + 1) + 1);
set.add(num);
}
3.
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("c");
LinkedHashSet<String> set = new LinkedHashSet<>();
set.addAll(list);
list.clear();
list.addAll(set);
System.out.println(list);
TreeSet
1. TreeSet(内部实现二叉树)
无序 不重复 无下标
主要作用: 用来排序
TreeSet<Integer> set = new TreeSet<>();
set.add(1);
set.add(13);
set.add(1);
set.add(2);
set.add(3);
for (Integer integer : set) {
System.out.println(integer);
}
2.
TreeSet<Worker> set = new TreeSet<>();
set.add(new Worker("张三", 20));
set.add(new Worker("李四", 18));
set.add(new Worker("王五", 40));
set.add(new Worker("赵六", 33));
for (Worker worker : set) {
System.out.println(worker);
}
@Override
public int compareTo(Worker o) {
int length = this.getName().length() - o.getName().length();
int num = length == 0 ? this.getAge() - o.getAge() : length;
return num == 0 ? this.getName().compareTo(o.getName()) : num;
}
3.
TreeSet<String> set = new TreeSet<>(new StringLengthCompareImpl());
set.add("asd");
set.add("asde");
set.add("asdef");
set.add("a");
set.add("asd");
set.add("as");
System.out.println(set);
class KeepStringImpl implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
int length = o1.length() - o2.length();
int num = length == 0 ? o1.compareTo(o2) : length;
return num == 0 ? 1 : num;
}