A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 飘影 中级黑马   /  2015-7-22 22:03  /  164 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



set集合。不存在相同的两个元素。无序,存储顺序和取出顺序不一致,
HashSet    他的子类   底层依赖两个方法,hashCode()和Equals()
首相比较哈希值 如果相同,继续走,比较地址值或者走equals()
如果不同,就直接添加到集合中。
instanceof  是什么对象      obj  instanceof student
注意,对于引用类,所有的hashcode都不会一样,所以不会检测添加的数据是否相同,所以,需要重写hashCode和equals函数。让hashCode处理时候相同的要hashCode要相同。
所以最终解决方案是:返回hashcode的内部返回
    例如:return  this.name.hashCode()+this.age*15;    成员变量的hashCode,*15是因为防止总值相同的情况,
但是这个不会自己写,所以用系统自动生成的就行,
LinkedHashSet  是hashSet的子类、     具有可预知迭代顺序,即顺序有序。
TreeSet   能够对元素按照某种规则进行排序
    排序有两种方式   A:自然排序     升序排序
                                B:比较器排序。
对于引用类,要指明使用哪个变量进行排序,所以,对于要惊醒排序的类,要实现一个接口
implements Comparable<T>   然后重写conparable方法,内部如果比较的规则大就返回大于0,等返回0,小返回小于0,
但是不仅要分析主要条件,还要分析次要条件,主要条件就是规定的按照排序的字段。防止出现主要条件相同,次要条件不同,但是不能添加的情况、
例如 : int num=this.age-s,age;
             int num2=num==0?this.age.compareTo(s.name):num;
             return num2;
  1. TreeSet<Student> tsSet=new TreeSet<Student>(new Comparator<Student>() {

  2.             @Override
  3.             public int compare(Student o1, Student o2) {
  4.                 // TODO Auto-generated method stub
  5.                 int num1=o1.getName().length()-o2.getName().length();
  6.                 int num2=num1==0?o1.getName().compareTo(o2.getName()):num1;
  7.                 int num3=num2==0?o1.getAge()-o2.getAge():num2;  
  8.                 return num3;
  9.             }

  10.         });
  11.         Student s1=new Student("meichaofeng", 20);
  12.         Student s2=new Student("yangguo", 22);
  13.         Student s3=new Student("xiaolongnv", 33);
  14.         Student s4=new Student("dongxie", 230);
  15.         Student s5=new Student("xidu", 204);
  16.         Student s6=new Student("nandi", 24);
  17.         Student s7=new Student("beigai", 20);
  18.         Student s8=new Student("yangguo", 22);

  19.         tsSet.add(s1);
  20.         tsSet.add(s2);
  21.         tsSet.add(s3);
  22.         tsSet.add(s4);
  23.         tsSet.add(s5);
  24.         tsSet.add(s6);
  25.         tsSet.add(s7);
  26.         tsSet.add(s8);

  27.         for (Student student : tsSet) {
  28.             System.out.println(student.toString());
  29.         }
复制代码


比较器排序(集合具备比较性)
    让集合的构造方法接收一个比较器接口的子类对象。Comparator

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马