Set接口:Set集合继承自Collection集合
Set:底层数据结构是一个哈希表,能保证元素是唯一的,元素不重复!
由哈希表保证元素的唯一性
由链接列表来保证元素的有序性!
TreeSet:Set集合中的一个重点
TreeSet集合底层是依赖于TreeMap的实例,而TreeMap<K,V>是依赖于红黑树结构实现的
两种:
自然排序:
比较器排序
这种排序的使用取决于开发者是用什么样的构造方法
TreeSet集合存储自定义对象并遍历
匿名内部类 实现 按照学生姓名长度从小到大进行排序
Random:产生一个随机数的类:
构造方式:
public Random()创建一个新的随机数生成器:默认种子不给定long类型的时间毫秒值
成员方法:
public int nextInt():由随机数生成器调用这个方法,随机数的范围在int类型的范围之内
public int nextInt(int n):生成随机数的范围:[0,n):使用比较多
获取10个1-20之间的随机数,要求不能重复 数组来操作,数组弊端,长度固定,使用集合存储
Set:底层数据结构是一个哈希表,能保证元素是唯一的,元素不重复!
它通过它的子实现了HashSet集合去实例化,HashSet集合底层是HashMap集合的实例!
package org.lemon.Set;
import java.util.HashSet;
import java.util.Set;
public class SetDemo {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
//set.add("我真的爱你");
//set.add("高圆圆");
for(String s :set) {
System.out.println(s);
}
}
}
package org.lemon.Set;
import java.util.HashSet;
public class HashSetDemo {
public static void main(String[] args) {
HashSet<Student> hs = new HashSet<Student>();
Student s1 = new Student("疾风骤雨",3);
Student s2 = new Student("天音波回音击",5);
Student s3 = new Student("金钟罩铁布衫",13);
Student s4 = new Student("天雷破摧筋断骨",15);
Student s5 = new Student("猛龙摆尾",20);
hs.add(s1);
hs.add(s2);
hs.add(s3);
hs.add(s4);
hs.add(s5);
for(Student s :hs) {
System.out.println(s.getName()+"---"+s.getAge());
}
}
}
package org.lemon.Set;
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;
}
//自动生成
@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;
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;
}
}
LinkedHashSet集合:
由哈希表保证元素的唯一性
由链接列表来保证元素的有序性!
package org.lemon.Set;
import java.util.LinkedHashSet;
public class LinkedHashSetDemo {
public static void main(String[] args) {
//创建LinkedHashSet集合对象
LinkedHashSet<String> link = new LinkedHashSet<String>();
link.add("我") ;
link.add("爱") ;
link.add("爱") ;
link.add("高圆圆") ;
link.add("高圆圆") ;
link.add("杨桃") ;
link.add("杨桃") ;
for(String s: link){
System.out.println(s);
}
}
}
TreeSet:Set集合中的一个重点
TreeSet集合底层是依赖于TreeMap的实例,而TreeMap<K,V>是依赖于红黑树结构实现的
两种:
自然排序:
比较器排序
这种排序的使用取决于开发者是用什么样的构造方法
package org.lemon.TreeSet;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Integer> ts = new TreeSet<Integer>();
ts.add(28);
ts.add(12);
ts.add(22);
ts.add(16);
ts.add(38);
ts.add(25);
ts.add(20);
for(Integer i :ts) {
System.out.print(i+ " ");
}
}
}
TreeSet集合存储自定义对象并遍历
package org.lemon.TreeSet;
//TreeSet集合存储自定义对象并遍历 按照学生的年龄从小到大进行排序:主要条件
import java.util.TreeSet;
public class TreeSetDemo2 {
public static void main(String[] args) {
TreeSet<Student> ts = new TreeSet<Student>();
Student s1 = new Student("高圆圆",27);
Student s2 = new Student("黄晓波",28);
Student s3 = new Student("杨桃",26);
Student s4 = new Student("杨桃",20);
Student s5 = new Student("高圆圆",27);
Student s6 = new Student("果然",24);
Student s7 = new Student("果然",26);
Student s8 = new Student("黄晓波",28);
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
ts.add(s6);
ts.add(s7);
ts.add(s8);
for(Student s : ts) {
System.out.println(s.getName()+"---"+s.getAge());
}
}
}
package org.lemon.TreeSet;
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;
}
//重写了compareTo()方法
@Override
public int compareTo(Student s) {
// return 0;
int num = this.age - s.age;
int num2 = num==0 ? s.name.compareTo(this.name) : num;
return num2;
}
}
按照学生姓名长度从小到大进行排序
package org.lemon.TreeSet2;
//按照学生姓名长度从小到大进行排序
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Student> ts = new TreeSet<Student>();
Student s1 = new Student("gaoyuanyuan",28);
Student s2 = new Student("gaoyuanyuan",27);
Student s3 = new Student("yangtao",24);
Student s4 = new Student("yangtao",23);
Student s5 = new Student("huanghaibo",29);
Student s6 = new Student("guoran",25);
Student s7 = new Student("huanghaibo",28);
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
ts.add(s6);
ts.add(s7);
for(Student s : ts) {
System.out.println(s.getName()+"---"+s.getAge());
}
}
}
package org.lemon.TreeSet2;
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;
}
@Override
public int compareTo(Student s) {
// return 0;
int num =this.name.length() - s.name.length();
int num2 =num==0 ? this.name.compareTo(s.name) : num ;
int num3 =num2==0 ? this.age - s.age : num2;
return num3;
}
}
匿名内部类 实现 按照学生姓名长度从小到大进行排序
package org.lemon.TreeSet3;
import java.util.Comparator;
import java.util.TreeSet;
//按照学生姓名长度从小到大进行排序 使用接口的匿名内部类(不需要自定义接口的子实现类!!!)
public class TreeSetDemo{
public static void main(String[] args) {
TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student s1 , Student s2) {
// return 0;
int num = s1.getName().length() - s2.getName().length() ;
int num2 =num==0 ? s1.getName().compareTo(s2.getName()) : num ;
int num3 =num2==0 ? s1.getAge() - s2.getAge() : num2 ;
return num3;
}
});
Student s1 = new Student("gaoyuanyuan",28);
Student s2 = new Student("gaoyuanyuan",27);
Student s3 = new Student("yangtao",24);
Student s4 = new Student("yangtao",23);
Student s5 = new Student("huanghaibo",29);
Student s6 = new Student("guoran",25);
Student s7 = new Student("huanghaibo",28);
ts.add(s1);
ts.add(s2);
ts.add(s3);
ts.add(s4);
ts.add(s5);
ts.add(s6);
ts.add(s7);
for(Student s : ts) {
System.out.println(s.getName()+"---"+s.getAge());
}
}
}
package org.lemon.TreeSet3;
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;
}
}
键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台
package org.lemon.TreeSet4;
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;
//键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
// 主要条件:总分从高到到第进行排序
int num = s2.getSum() - s1.getSum();
// 总分相同,不一定语文成绩相同,比较语文成绩
int num2 = num == 0 ? s1.getChinese() - s2.getChinese() : num;
// 总分相同,语文成绩相同,比较数学成绩
int num3 = num2 == 0 ? s1.getMath() - s2.getMath() : num2;
// 总分相同,语文成绩相同,数学相同,比较英语
int num4 = num3 == 0 ? s1.getEnglish() - s2.getEnglish() : num3;
// 总分以及各科成绩都相同,不一定是同一个人,姓名内容是否相同
int num5 = num4 == 0 ? s1.getName().compareTo(s2.getName())
: num4;
return num5;
}
});
for (int x = 1; x <= 5; x++) {
// 创建键盘录入对象String类型接收
Scanner sc = new Scanner(System.in);
System.out.println("请输入第" + x + "个学生的姓名:");
String name = sc.nextLine();
System.out.println("请输入第" + x + "个学生的语文成绩:");
String chineseString = sc.nextLine();
System.out.println("请输入第" + x + "个学生的数学成绩:");
String mathString = sc.nextLine();
System.out.println("请输入第" + x + "个学生的英语成绩:");
String englishString = sc.nextLine();
// 创建一个学生对象,把这些信息封装到学生对象中
Student s = new Student();
s.setName(name);
s.setChinese(Integer.parseInt(chineseString));
s.setMath(Integer.parseInt(mathString));
s.setEnglish(Integer.parseInt(englishString));
ts.add(s);
}
for(Student s : ts) {
System.out.println(s.getName()+"\t"+s.getChinese()+"\t"+s.getEnglish()+"\t"+s.getMath());
}
}
}
package org.lemon.TreeSet4;
public class Student {
private String name ;
private int chinese ;
private int math ;
private int english;
public Student() {
super();
}
public Student(String name, int chinese, int math, int english) {
super();
this.name = name;
this.chinese = chinese;
this.math = math;
this.english = english;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getChinese() {
return chinese;
}
public void setChinese(int chinese) {
this.chinese = chinese;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getEnglish() {
return english;
}
public void setEnglish(int english) {
this.english = english;
}
public int getSum() {
return this.english + this.chinese +this.math ;
}
}
Random:产生一个随机数的类:
构造方式:
public Random()创建一个新的随机数生成器:默认种子不给定long类型的时间毫秒值
成员方法:
public int nextInt():由随机数生成器调用这个方法,随机数的范围在int类型的范围之内
public int nextInt(int n):生成随机数的范围:[0,n):使用比较多
package org.lemon.Random;
import java.util.Random;
//Random:产生一个随机数的类
public class RandomDemo {
public static void main(String[] args) {
Random r = new Random();
for(int i =0 ;i<10;i++) {
int number = r.nextInt((20)+1);
System.out.println(number);
}
}
}
获取10个1-20之间的随机数,要求不能重复 数组来操作,数组弊端,长度固定,使用集合存储
package org.lemon.Random;
import java.util.ArrayList;
import java.util.Random;
//获取10个1-20之间的随机数,要求不能重复 数组来操作,数组弊端,长度固定,使用集合存储
public class RandomDemo2 {
public static void main(String[] args) {
Random r = new Random();
ArrayList<Integer> array = new ArrayList<Integer>();
int count =0 ;
while(count <10) {
int number = r.nextInt((20)+1);
if(!array.contains(number)) {
array.add(number);
count++;
}
}
for(Integer i : array) {
System.out.println(i);
}
}
}