Set
Set(接口)
特点: 无序(无下标) 不重复
HashSet
先创建一个Person类
Person类中有 名字 年龄
写上构造函数
set/get方法
重写 toString方法
set添加字符串
public static void fun1() {
Hash set = new HashSet<>();
boolean b1 = set.add("d");
boolean b2 = set.add("d");
set.add("a");
set.add("b");
set.add("c");
System.out.println(b1);
System.out.println(b2);
System.out.println(set);
}
HashSet p = new HashSet<>();
p.add(new Person("aa", 16));
p.add(new Person("aa", 16));
p.add(new Person("bb", 16));
p.add(new Person("bb", 16));
p.add(new Person("cc", 16));
p.add(new Person("cc", 16));
for (Person person : p){
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;
}
HashSet set = new HashSet<>();
while(set.size()){
int num = (int)(Math.random()*20 - 1);
set.add(num);
}
System.out.println(set);
linkedHashSet
linkedHashSet 是 Hashset的一个子类
特点: 有序(怎么存的 就能怎么取出来)
linkedHashSet set = new linkedHashSet<>()
set.add("z")
set.add("j")
set.add("a")
set.add("a")
set.add("v")
set.add("a")
System.out.println(set)
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
LinkedHashSet set = new LinkedHashSet<>();
char[] charArray = string.toCharArray();
for (int i = 0; i < charArray.length; i++) {
set.add(charArray[i]);
}
System.out.println(set);
//利用set集合 去除ArrayList集合中的重复元素
//(操作原ArrayList)
ArrayList aList = new ArrayList<>()
aList.add("a")
aList.add("a")
aList.add("b")
aList.add("b")
aList.add("c")
aList.add("c")
LinkedHashSet set = new LinkedHashSet<>()
//将 aList中的元素全都扔到 set中 去重
set.addAll(aList)
//清空原aList
aList.clear()
//把set中去完重的元素扔回aList中
aList.addAll(set)
//打印
System.out.println(aList)
TreeSet
TreeSet(内部实现: 二叉树)
无序(无下标) 不重复
主要作用: 用来排序
(无序的意思是 不按照怎么存进去的顺序取出来)
创建一个Worker类 继承 Person类 写出构造方法
TreeSet set = new TreeSet<>();
set.add(1);
set.add(13);
set.add(1);
set.add(2);
set.add(3);
set.add(4);
for(Integer integer : set)
TreeSet wSet = new TreeSet<>();
wSet.add(new Worker("ygs", 21));
wSet.add(new Worker("ygh", 21));
wSet.add(new Worker("ygssb", 21));
wSet.add(new Worker("xsd", 22));
wSet.add(new Worker("hzn", 19));
wSet.add(new Worker("wl", 24));
for (Worker worker : wSet) {
System.out.println(worker);
}
}
来到Wroker类中:
public class Worker extends Person implements Comparable<Worker>{
public Worker() {
}
public Worker(String name, int age) {
super(name, age);
}
@Override
public int compareTo(Worker o) {
return 0;
}
}
第一个传进集合里的相当于根 也就是 return 0 时
打印出来的那个值 就是 根
当 this.getAge() - o.getAge() > 0 时
传进来的值 在 根的右边
this.getAge() - o.getAge() < 0 时,在根的左边
this.getAge() - o.getAge() == 0 时 不存储
TreeSet wSet = new TreeSet<>();
wSet.add(new Worker("ygs", 21));
wSet.add(new Worker("ygh", 21));
wSet.add(new Worker("ygssb", 21));
wSet.add(new Worker("xsd", 22));
wSet.add(new Worker("hzn", 19));
wSet.add(new Worker("wl", 24));
for (Worker worker : wSet) {
System.out.println(worker);
}
}
来到Wroker类中:
public class Worker extends Person implements Comparable<Worker>{
public Worker() {
}
public Worker(String name, int age) {
super(name, age);
}
@Override
public int compareTo(Workder o){
return this.getAge() - o.getAge();
}
}
@Override
public int compareTo(Workder o){
return this.getNage().compareTo(o.getName());
}
@Override
public int compareTo(Worker o){
if(this.getAge() == o.getAge()){
reutrn this.getNage().compareTo(o.getName())
}
return this.getAge() - i.getAge();
}
@Override
public int compareTo(Worker o){
int length = this.getName().length();
int length2 = o.getName().length();
if(this.getAge() > o.getAge()){
return this.getAge() - o.getAge();
}else if(this.getAge() == o.getAge()){
return this.getName.compareTo(o.getName());
}
return length - length - 2;
}
比较器Comparator
public static void fun3() {
TreeSet set = new TreeSet<>(new StringLegnthCompareImpl());
set.add("asd");
set.add("asde");
set.add("asdef");
set.add("a");
set.add("as");
System.out.println(set);
}
class StringLegnthCompareImpl implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
if (o1.length() == o2.length()) {
return o1.compareTo(o2);
}
return o1.length() - o2.length();
}
}
public static void fun4() {
TreeSet set = new TreeSet<>(new RepeatStringImpl());
set.add("asd");
set.add("asde");
set.add("asdef");
set.add("a");
set.add("asd");
System.out.println(set);
}
class RepeatStringImpl 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;
}
}
public static void fun5() {
System.out.println("请输入字符串");
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
char[] charArray = string.toCharArray();
TreeSet set = new TreeSet<>(new CompareStringAndRepeatTheSameString());
for (int i = 0; i < charArray.length; i++) {
set.add(charArray[i]);
}
System.out.println(set);
}
class CompareStringAndRepeatTheSameString implements Comparator<Character>{
@Override
public int compare(Character o1, Character o2) {
int num = o1.compareTo(o2);
return num == 0 ? 1 : num;
}
}
public static void fun6() {
Scanner scanner = new Scanner(System.in);
TreeSet set = new TreeSet<>(new KeepIntImpl());
while (true) {
System.out.println("请输入整数 输入quit时结束输入");
String string = scanner.nextLine();
if (string.equals("quit")) {
break;
}
int num = Integer.parseInt(string);
set.add(num);
}
System.out.println(set);
}
class KeepIntImpl implements Comparator{
@Override
public int compare(Integer o1, Integer o2) {
int num = o1 - o2;
return -(num == 0 ? 1 : num);
}
}
public class Student implements Comparable{
private String name;
private int ChineseScore;
private int MathScore;
private int EnglishScore;
private int sum;
public Student() {
}
public Student(String name, int chineseScore, int mathScore, int englishScore) {
this.name = name;
ChineseScore = chineseScore;
MathScore = mathScore;
EnglishScore = englishScore;
this.sum = chineseScore + mathScore + englishScore;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getChineseScore() {
return ChineseScore;
}
public void setChineseScore(int chineseScore) {
ChineseScore = chineseScore;
}
public int getMathScore() {
return MathScore;
}
public void setMathScore(int mathScore) {
MathScore = mathScore;
}
public int getEnglishScore() {
return EnglishScore;
}
public void setEnglishScore(int englishScore) {
EnglishScore = englishScore;
}
public int getScore() {
return sum;
}
@Override
public String toString() {
return "Student [name=" + name + ", ChineseScore=" + ChineseScore + ", MathScore=" + MathScore
+ ", EnglishScore=" + EnglishScore + ", Score=" + sum + "]";
}
@Override
public int compareTo(Student o) {
int num = this.sum - o.sum;
return num == 0 ? 1 : num;
}
}
public class Demo {
public static void main(String[] args) {
TreeSet set = new TreeSet<>();
Scanner scanner = new Scanner(System.in);
while(set.size() < 5) {
System.out.println("请输入学生信息 +(姓名,语文成绩,数学成绩,英语成绩)");
String string = scanner.nextLine();
String[] strings = string.split(",");
int chineseScore = Integer.parseInt(strings[1]);
int mathScore = Integer.parseInt(strings[2]);
int englishScore = Integer.parseInt(strings[3]);
Student student = new Student(strings[0], chineseScore, mathScore,
englishScore);
set.add(student);
}
System.out.println(set);
}
Day.19