Set 集合的特征: 存储的元素(引用数据类型) 无序的,不可重复的。
Set:Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。Set 接口存储一组唯一,无序的对象。
SortedSet:继承于Set保存有序的集合。
——————————————
HashSet 内部存储是一个散列表。 HashSet 内部实现是一个HashMap.
集合存在的意义,就是存储对象。
下面展示一些 SetDemo 代码片
。
public class SetDemo {
public static void main(String[] args) {
// 接口 = 实现类
Set<String> set = new HashSet<String>();
// 实现类 = 实现类
HashSet<String> hSet = new HashSet<String>();
hSet.add("dahuang");
// Set提供的方法。
set.add("ac");
set.add("hello");
set.add("java");
set.add("sql");
set.add("oracle");
set.add("jack");
set.add("zee");
// Set 不可重复存放元素
set.add("zee");
// 遍历Set集合。
System.out.println(set.toString());
// 数组的长度
System.out.println(set.size());
// addall
set.addAll(hSet);
System.out.println(set.toString());
//clear 清楚集合中所有元素
// set.clear();
// System.out.println(set.size());
// 是否包含某个元素
System.out.println(set.contains("dahuang"));
// hashCode
System.out.println(set.hashCode());
// 删除某个元素
set.remove("dahuang");
System.out.println(set.toString());
// 集合的遍历1: toArray
Object[] objs = set.toArray();
for(Object obj:objs){
String str = (String)obj;
System.out.println(str+" ");
}
System.out.println("\n==============================");
// 集合的遍历 2: forEach
for(String str:set){
System.out.println(str+" ");
}
System.out.println("\n=============================");
// 集合的遍历 3: Iterator 迭代器 游标
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){// hasNext 下一位是否还有值。
System.out.println(iterator.next()+" ");// 输入下一位的值。
}
}
}
以上代码打印输出:
——————————————————
下面展示一些 SetDemo 2 代码片
。
public class SetDemo2 {
public static void main(String[] args) {
Set set = new HashSet<>();
set.add(1);// Integer
set.add(15);
set.add(26);
set.add(3);
set.add(7);
System.out.println(set.toString());
}
}
以上代码打印输出:
————————————————————
hashset 存储对象, 先判断对象的hashcode值是否存在于散列表中。如果没有,就存入Set集合。
如果有,在判定,两个对象的equals 是否相同。如果相同,不存储。如果requals 不同,则存入。
set集合中,有两个相同的hashcode。 但不可能有两个相同的equals。
下面展示一些 Student 代码片
。
public class Student {
public String name;
public int age;
public String sex;
public Student(){
super();
}
public Student(String name, int age, String sex){
super();
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public String toString(){
return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
@Override
public int hashCode(){
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((sex == null) ? 0 : sex.hashCode());
return result;
}
public boolean equsls(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;
if (sex == null){
if(other.sex != null)
return false;
} else if (!sex.equals(other.sex))
return false;
return false;
}
// @Override
// public int hashCode() {
// return name.hashCode()+age+sex.hashCode();
// }
//
// @Override
// public boolean equals(Object obj) {
// Student student = (Student)obj;
// if(student.name.equals(this.name) && student.age == age && student.sex.equals(this.sex)){
// return true;
// }else{
// return false;
// }
// }
}
下面展示一些 测试类 代码片
。
public class Test {
public static void main(String[] args) {
Student stu = new Student("张伟",8,"女");
Student stu1 = new Student("李漂亮",18,"男");
Student stu2 = new Student("杨丹",28,"女");
// stu2 和stu3 算不算重复 //不算
Student stu3 = new Student("杨丹",28,"女");
// 创建集合
Set<Student> stus = new HashSet<Student>();
stus.add(stu);
stus.add(stu1);
stus.add(stu2);
stus.add(stu3);
// hashCode
System.out.println(stu2.hashCode());
System.out.println(stu3.hashCode());
// 在判断reques 方法是否相同。
System.out.println(stu2.equals(stu3));
// 遍历集合
for(Student student : stus){
System.out.println(student);
}
}
}
以上两联代码打印输出:
————————————————————
下面展示一些 LinkedHashSetDemo 代码片
。
public class LinkedHashSetDemo {
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
set.add("hello");
set.add("java");
set.add("mysql");
set.add("oracle");
set.add("html");
set.add("css");
set.add("css");// 不能重复
set.add("css");// 不能重复
for(String str : set){
System.out.println(str+" ");
}
}
}
————————————————————
下面展示一些 学生 Student 代码片
。
public class Student implements Comparable<Student>{
public String name;
public int age;
public String sex;
public Student(){
super();
}
public Student(String name, int age, String sex){
super();
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public String toString(){
return "Student [name=" + name + ", age="+ age + ",sex=" + sex + "]";
}
@Override
public int compareTo(Student o){
return o.age-age;
}
}
下面展示一些 TreeSetDemo 代码片
。
public class TreeSetDemo {
public static void main(String[] args){
Set<String> set = new TreeSet<>();
set.add("1hello");
set.add("2java");
set.add("5aaaa");
set.add("3aaa");
set.add("7blue");
set.add("4gree");
set.add("6full");
for(String str : set){
System.out.println(str);
}
}
}
下面展示一些 TreeSetDemo 2代码片
。
public class TreeSetDemo2 {
public static void main(String[] args) {
Student stu = new Student("张伟",8,"女");
Student stu1 = new Student("李漂亮",18,"男");
Student stu2 = new Student("杨丹",28,"女");
TreeSet<Student> set = new TreeSet<Student>(new MyComparable());
set.add(stu);
set.add(stu1);
set.add(stu2);
// 遍历集合。
for(Student student : set){
System.out.println(student);
}
}
}
// 自定义排序规则类。
class MyComparable implements Comparator<Student>{
@Override
public int compare(Student o1, Student o2){
return o2.age-o1.age;
}
}
下面展示一些 TreeSetDemo3 代码片
。
public class TreeSetDemo3 {
public static void main(String[] args) {
Student stu = new Student("张伟",8,"女");
Student stu1 = new Student("李漂亮",18,"男");
Student stu2 = new Student("杨丹",28,"女");
System.out.println(stu.compareTo(stu1));
TreeSet<Student> set = new TreeSet<Student>();
set.add(stu);
set.add(stu1);
set.add(stu2);
//遍历集合。
for(Student student : set){
System.out.println(student);
}
}
}
以上代码打印输出:
Student学生类:
TreeSetDemo:
TreeSetDemo2:
TreeSetDemo3:
————————————————————
小练习:
注册 登录
Admin 类。 用户名,密码。
集合。 不能重复。
登录。 判断集合中是否有对象。
public class HomeWork {
public static void main(String[] args) {
}
}