day12-集合框架 Set
1 HashSet和LinkedHashSet
- 无索引,不能重复,无序
- LinkedHashSet
- 底层是链表结构,是Set集合中唯一一个保证怎么存就怎么取的集合对象
- 其它的原理和HashSet一样
- HashSet关于对象减少次数的方法
package com.hui.bean;
public class Student {
private String name;
private int age;
public Student() {
super();
}
public Student(String name, int age) {
super();
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;
}
@toString.java
public String toString() {
return "[name=" + name + ", age=" + age + "]";
}
@hashcode.java
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@equals.java
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) 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;
}
}
import com.hui.bean.Student;
import java.util.HashSet;
class DemoRandom {
public static void main(String[] Args) {
HashSet<Student> ha=new HashSet<>();
ha.add(new Student("张三",23));
ha.add(new Student("张三",23));
ha.add(new Student("张三",23));
ha.add(new Student("李四",24));
ha.add(new Student("李四",24));
ha.add(new Student("王五",25));
ha.add(new Student("王五",25));
ha.add(new Student("王五",25));
ha.add(new Student("王五",25));
System.out.println(ha);
for(Student s:ha) {
System.out.println(s);
}
}
}
import java.util.HashSet;
import java.util.Random;
class DemoRandom {
public static void main(String[] Args) {
Random r=new Random();
HashSet<Integer> hs=new HashSet<>();
while(hs.size()<10) {
hs.add(r.nextInt(20)+1);
}
System.out.println(hs);
}
}
import java.util.LinkedHashSet;
import java.util.Scanner;
class DemoRandom {
public static void main(String[] Args) {
Scanner sc=new Scanner(System.in);
System.out.println("请录入一行字符");
LinkedHashSet<Character> lhs=new LinkedHashSet<>();
char[] arr=sc.nextLine().toCharArray();
for(int i=0;i<arr.length;i++) {
lhs.add(arr[i]);
}
System.out.println(lhs);
}
}
2 TreeSet
- 特点:对元素进行排序,也保证元素的唯一
- TreeSet集合在对元素自动排序时:
- 1 如果是整数,其是按照数值大小排序的
- 2 如果是自定义对象,像("张三",23),TreeSet并不知道该如何对其进行比较,此时需要引入比较器Comparable,但是要重写compareTo方法。注意,compareTo是按照字典顺序进行排序的。如果要对长度进行排序,需要继承Comparator接口
- 3 Comparator接口下的compareTo
- int comparetor(T o1,T o2)
package com.hui.bean;
public class Student implements Comparable<Student> {
private String name;
private int age;
public Student() {
super();
}
public Student(String name, int age) {
super();
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 "Student [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Student o) {
return 0;
}
}
import com.hui.bean.Student;
import java.util.TreeSet;
class DemoTreeSet {
public static void main(String[] Args) {
TreeSet<Student> ts=new TreeSet<>();
ts.add(new Student("张三",23));
ts.add(new Student("张三",23));
ts.add(new Student("李四",24));
ts.add(new Student("李四",24));
ts.add(new Student("李四",24));
ts.add(new Student("王五",25));
ts.add(new Student("王五",25));
System.out.println(ts);
}
}