set
1 TreeSet
1.1基础知识
- A自然排序B自定义排序
- comparaTo自定义顺序,-1逆序,1顺序, ```
- 自定义排序列表:
public int compareTo(User u) { //主要条件:按年龄排序 int num = this. age - u.age; //次要条件:年龄相同,还看姓名是否相同 int num2 = num == 0 ? this.name.compareTo(u.name) : num; return num2; } ```
1.1 TreeSet基础代码
TreeSet<Integer> ts = new TreeSet<>();
ts.add(20);
ts.add(19);
ts.add(18);
ts.add(17);
ts.add(16);
ts.add(15);
ts.add(14);
ts.add(13);
for (Integer i : ts) {
System.out.println(i);
}
1.1 TreeSet基础代码测试结果:
1.2 TreeSet自定义排序
main
TreeSet<User> set = new TreeSet<>();
User u1 = new User("a123", 20);
User u2 = new User("b456", 21);
User u3 = new User("c789", 22);
User u4 = new User("e789", 22);
User u5 = new User("g789", 22);
User u6 = new User("m789", 22);
User u7 = new User("p789", 22);
set.add(u1);
set.add(u2);
set.add(u3);
set.add(u4);
set.add(u5);
set.add(u6);
set.add(u7);
for (User u :set){
System.out.println(u);
}
User.java
public class User implements Comparable<User>{
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User)) return false;
User user = (User) o;
return getAge() == user.getAge() && Objects.equals(getName(), user.getName());
}
@Override
public int hashCode() {
return Objects.hash(getName(), getAge());
}
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 int compareTo(User o) {
return -1;
}
}
1.2 TreeSet自定义排序测试结果:
1.3 自然排序主次要案例demo
main
TreeSet<User> set = new TreeSet<>();
User u1 = new User("kebi", 20);
User u2 = new User("baoluo", 21);
User u3 = new User("hellun", 22);
User u4 = new User("rose", 22);
User u5 = new User("juhua", 22);
User u6 = new User("lihua", 22);
User u7 = new User("hiehie", 22);
set.add(u1);
set.add(u2);
set.add(u3);
set.add(u4);
set.add(u5);
set.add(u6);
set.add(u7);
for (User u :set){
System.out.println(u);
}
User.java
public class User implements Comparable<User>{
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
![请添加图片描述](https://img-blog.csdnimg.cn/1e6b6f984e3440beb3ebde23a7a5bd00.png)
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof User)) return false;
User user = (User) o;
return getAge() == user.getAge() && Objects.equals(getName(), user.getName());
}
@Override
public int hashCode() {
return Objects.hash(getName(), getAge());
}
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 int compareTo(User u) {
//主要条件: 名字长度排序
int num = this.name.length() - u.name.length();
//次要条件: 名字长度相同,按不同内容排序
int num2 = num == 0 ? this.name.compareTo(u.name) : num;
//次要条件:内容名字相同,年龄排序
int num3 = num2 == 0 ? this.age - u.age : num2;
return num3;
}
}
1.3 HashSet基础代码测试结果:
1.4 HashSet基础代码
1.4 HashSet基础代码测试结果:
1.5HashSet基础代码
1.5 HashSet基础代码测试结果:
2 HashSet
2.1 HashSet基础代码
User.java
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
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 age == user.age && Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(name, 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;
}
}
Set<User> set = new HashSet<>();
User u1 = new User("123", 20);
User u2 = new User("456", 21);
User u3 = new User("789", 22);
set.add(u1);
set.add(u2);
set.add(u3);
for (User u :set){
System.out.println(u);
}
2.1 HashSet基础代码测试结果:
2.2 HashSet基础代码
2.2 HashSet基础代码测试结果:
2.3 HashSet基础代码
2.3 HashSet基础代码测试结果:
2.4 HashSet基础代码
2.4 HashSet基础代码测试结果:
3 LinkHashSet
- 底层数据结构是由哈希表和链表组成
- 存储和取出一致
3.1 LinkHashSet基础代码
LinkedHashSet<String> ls = new LinkedHashSet<>();
ls.add("hello0");
ls.add("hello0");
ls.add("java");
ls.add("world");
ls.add("god");
ls.add("it");
Iterator<String> it = ls.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
3.1 LinkHashSet基础代码测试结果:
3.2 LinkHashSet基础代码
3.2 LinkHashSet基础代码测试结果:
3.3 HashSet基础代码
3.3 HashSet基础代码测试结果:
3.4 HashSet基础代码
3.4 HashSet基础代码测试结果: