欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

set

程序员文章站 2024-03-22 13:56:46
...

set

Set 集合的特征 : 存储的元素 (引用数据类型) 无序的 不可重复的
HashSet 内部存储的是一个散列表 hashSet 内部实现的是一个 HashMap。
集合存在的意义 就是存储对象

  //接口                  =     实现类            
  Set<String> set = new HashSet<String>();
  
  //实现类                        =  实现类 
  HashSet<String> hSet = new HashSet<String>();
  hSet.add("dahuang");
  //Set 提供的方法
  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());
  
  //数组长度 size 
  System.out.println(set.size());
  
  //addall  将两个数组结合 拼接 无序
  set.addAll(hSet);
  System.out.println(set.toString());
  //clear 清除集合中的所有元素
//  set.clear();
//  System.out.println(set.toString());
// contains 是否包含某个元素
  System.out.println(set.contains("dahuang"));
  
  //hashCode 变量都有hashCode值 
  System.out.println(set.hashCode());
  
  //删除某个元素remove
  set.remove("dahuang");
  System.out.println(set.toString());
  
  //集合遍历 1:toArray
  Object[] ob = set.toArray();
  for (Object obj : ob) {
   String str  = (String)obj;//强制类型转换
   System.out.print(str+" ");
  }
  System.out.println();
  
  //集合遍历 2 :  forEach
  for(String str : set){//提前声明了   <String>
   System.out.print(str+" ");
  }
  System.out.println();
  
  //集合遍历 3 iterator 迭代器  游标
  Iterator<String> iterator = set.iterator();
  while(iterator.hasNext()){//hasNext 判断下一位是否还有值
   System.out.print(iterator.next()+" ");//输出下一位的值
  }
Set set = new HashSet<>();//无序
  set.add(1);//integer
  set.add(32);
  set.add(23);
  set.add(54);
  set.add(45);
  System.out.println(set.toString());

Hashset 集合存储对象的原理
Hashset 储存对象 先判断对象的hashcode值是否存在于散列表中 如果没有 就存入Set集合
如果有 在判定 两个对象的equals是否相同 如果equals相同 不存储 如果equals不相同则存入
set集合中 有两个相同的hashcode 但是不可能有两个相同的equals

Student stu = new Student("张伟","男",8);
  Student stu1 = new Student("李四","男",18);
  Student stu2 = new Student("杨丹","女",28);
  // stu3 和stu2  算不算重复  (不算 )
  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());
  
  //再判断 equals 方法是否相同
  System.out.println(stu2.equals(stu3));
  
  //遍历集合
  for(Student stud : stus){
   System.out.println(stud);
  }
// public int hashCode() {//修改 hashCode
//  
//  return name.hashCode()+age+sex.hashCode();
// }
// @Override
// public boolean equals(Object obj) {//修改equals方法
//  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 Student {
 public  String name;
 public String sex;
 public int age;
 public Student(String name, String sex, int age) {
  super();
  this.name = name;
  this.sex = sex;
  this.age = age;
 }
 @Override
 public String toString() {
  return "Student [name=" + name + ", sex=" + sex + ", 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());
  result = prime * result + ((sex == null) ? 0 : sex.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;
  if (sex == null) {
   if (other.sex != null)
    return false;
  } else if (!sex.equals(other.sex))
   return false;
  return true;
 }

LikedHashSet 有链表顺序 不能重复
Link 链表

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");//不能重复
  
  for(String str : set){
   System.out.println(str + "  ");
  }

Tree 树
Tree 树形结构 有序的
TreeSet 是可排序的集合 默认按照字典或数字顺序排列

Set<String> set = new TreeSet<>();
  set.add("hello");
  set.add("java");
  set.add("aaaa");
  set.add("aaa");
  set.add("bule");
  set.add("gree");
  set.add("full");
  
  for(String str : set){
   System.out.println(str);
  }
  
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 st : set){
   System.out.println(st);//没有定义排列顺序  一开始报错 
  }
  //自定义排序规则类
  class MyComparable implements Comparator<Student>{
  public int compare(Student o1, Student o2) {
  return o1.age-o2.age;
 }
public class Student implements Comparable<Student>{
 public  String name;
 public String sex;
 public int age;
 public Student(String name, String sex, int age) {
  super();
  this.name = name;
  this.sex = sex;
  this.age = age;
 }
 @Override
 public String toString() {
  return "Student [name=" + name + ", sex=" + sex + ", 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());
  result = prime * result + ((sex == null) ? 0 : sex.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;
  if (sex == null) {
   if (other.sex != null)
    return false;
  } else if (!sex.equals(other.sex))
   return false;
  return true;
 }
 @Override
 public int compareTo(Student o) {
  return o.age-age;
 }
 // public int hashCode() {//修改 hashCode
//  
//  return name.hashCode()+age+sex.hashCode();
// }
// @Override
// public boolean equals(Object obj) {//修改equals方法
//  Student student = (Student)obj;
//  if(student.name.equals(this.name) && student.age == age &&
//   student.sex.equals(this.sex) ){
//   return true;
//  }else{
//   return false;
//  }

上一篇: Set

下一篇: Mapreduce的wordcount写法