写在前面:代码中均有详细注释,文本内容中不再赘述
set:保证元素的唯一性
HashSet保证元素的唯一
公用类Student
package bean;
public class Student {
private int age;
private String name;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student( String name,int age) {
super();
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Student [age=" + age + ", name=" + name + "]";
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31; //是一个质数,既不大也不小
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());//name=null返回0,不为空返回哈希值
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) //调用对象和传入对象是同一个对象
return true; //返回ture
if (obj == null) //传入对象为null
return false; //返回false
if (getClass() != obj.getClass()) //调用对象和传入对象的字节码文件不同
return false; //返回false
Student other = (Student) obj; //向下转型
if (age != other.age) //调用对象年龄与传入对象年龄不等
return false; //返回false
if (name == null) { //调用对象姓名为null
if (other.name != null) //传入对象姓名不为null
return false; //返回false
} else if (!name.equals(other.name))//调用对象姓名不等于传入对象
return false; //返回false
return true; //否则返回true
}
}
Demo1用HashSet存储字符串并遍历
package set;
import java.util.HashSet;
public class Demo1_Hashset {
/*
* Hashset存储字符串并遍历
* */
public static void main(String[] args) {
HashSet<String> str=new HashSet<>();
str.add("a");
str.add("b");
System.out.println(str);
for (String string : str) {
System.out.println(string);
}
}
}
运行结果:
Demo1Plus用HashSet存储自定义对象并遍历且去除重复(再次强调去除重复必须重写类中的HasCode(),equals()方法)
package set;
import java.util.HashSet;
import bean.Student;
/*
* 存储自定义对象并保证元素唯一
* */
public class Demo1_HashsetPlus {
public static void main(String[] args) {
HashSet<Student> hs=new HashSet<>();
hs.add(new Student("张三", 23));
hs.add(new Student("张三", 23));
hs.add(new Student("李四", 23));
hs.add(new Student("李四", 23));
hs.add(new Student("王五", 23));
hs.add(new Student("赵六", 23)); //HashSet保证元素唯一的方法是:new 一个对象时会调用hashcode()方法生成一个Hashcode,当hash值一样时,在调用equals方法做判断,所以要重写equals和hashCode方法,提高了去重复效率
for (Student student : hs) {
System.out.println(student
);
}
}
}
运行结果如下:
LinkedHashSet:保证元素的唯一性,且怎么存就怎么取。
package set;
import java.util.LinkedHashSet;//怎么存怎么取且保证了元素的唯一性
public class Demo2_LinkedHashSet {
public static void main(String[] args) {
LinkedHashSet<Integer> lhs=new LinkedHashSet<>();
lhs.add(1);
lhs.add(2);
lhs.add(3);
lhs.add(5);
lhs.add(4);
System.out.println(lhs);
}
}
运行结果如下:
需求:编写一个程序,获取10个1至20的随机数,要求随机数不能重复。并把最终的随机数输出到控制台。
package test;
import java.util.HashSet;
import java.util.Random;
public class Test1 {
/* A:案例演示
* 需求:编写一个程序,获取10个1至20的随机数,要求随机数不能重复。并把最终的随机数输出到控制台。
*
* 分析:
* Random创建对象
* Hashset实现不重复,比LinkedHashSet效率高
*/
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);
}
}
运行结果如下:
使用Scanner从键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符
package test;
import java.util.HashSet;
import java.util.Scanner;
import javax.print.DocFlavor.CHAR_ARRAY;
public class Test2_Scanner {
/* 使用Scanner从键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符
* aaaabbbcccddd
*
*实现步骤:从键盘获取字符串
*字符串转为字符数组
*遍历字符数组添加到HashSet中并遍历输出
*/
public static void main(String[] args) {
Scanner sc = new Scanner(system.in - 这个网站可出售。 - 最佳的System 来源和相关信息。);
String i = sc.nextLine();
System.out.println(i);
char[] cr=i.toCharArray();
HashSet<Character> hs=new HashSet<>();
for (char c : cr) {
hs.add(c);
}
System.out.println(hs);
}
}
运行结果如下:
TreeSet集合可以保证元素的唯一并且实现排序
package set;
import java.util.Comparator;
import java.util.TreeSet;
public class Demo3_TreeSet {
/*
* * A:案例演示
* TreeSet保证元素唯一和比较器排序的原理及代码实现
*
* String的自然比较方法是安装Unicode编码或字典,要实现按照字符串长度比较需要重写方法,而重写的方法需要通过实现接口。
* */
public static void main(String[] args) {
TreeSet<String> ts=new TreeSet<>(new Compare()); //TreeSet(Comparator<? super E> comparator) 构造一个新的空 TreeSet,它根据指定比较器进行排序。
ts.add("yaa");
ts.add("a");
ts.add("csaa");
ts.add("aaaw");
ts.add("wa");
System.out.println(ts);
}
}
class Compare implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
int num=o1.length()-o2.length(); //
return num==0?o1.compareTo(o2):num;
}
}
由于代码练习较多,过两天会有对应的文本整理