码迷,mamicode.com
首页 > 其他好文 > 详细

12集合(2)-----Set

时间:2019-03-24 13:36:14      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:equal   ==   bsp   code   student   tor   不重复   包括   有一个   

一.总体分类

  • Collection(包括方法add,remove,contains,clear,size)
  1. List(接口)

      LinkedList

      ArrayList

      Vector---Stack

   2. Set

      HashSet

      TreeSet

  • Map
  1. Hashtable---properties
  2. HashMap
  3. TreeMap

二.集合------Set(无序,不可重复)

  无法获取索引位置,所以遍历时不能用for的普通方法,只能用增强for循环和迭代器。

HashSet hs=new HashSet();

1.HashSet  

HashSet如何判断元素重复呢

  1. 对于每个Object,都有一个HashCode的方法,可以尽量保证每个对象的HashCode值不同
  2. 如果HashCode相同,再比较*.equlas()方法
  3. 如果1 2 都相同,则两元素相同

  我们可以在Student类中重写HashCode和equals的方法

@override
public int hashCode(){
      final int prime=31;//源码是定义一个素数用来做乘法
      int result=1;
      result=prime*result+age;
      return result;
}    
@override
public boolean equals(Object obj){
     if(this==obj)
          return true;    
}

  例子:谁发了邮件,一个人发了很多次,找谁给我发了邮件。(此时就用到了不重复的hashSet)

2.TreeSet

虽然也是不能重复,也是无序,但是TreeSet的无序是按照自然顺序排放的。并且数据类型必须相同

  1. 字母:a b c字典顺序
  2. 数字:1 2 3 大小顺序
  3. 汉子:自己有自己的想法
  4. 类:需要这个类实现Comparable接口或者自定义比较器
TreeSet ts=new TreeSet();

   方法一:类继承Comparable接口 

@override
public int compareTo(Object o){
     Student s=(Student)o;
     return s.age-age;    
}
//当前类属性-参数类属性------升序,反之,降序
@override
public String toString(){
     return "fsadjnfaake";  
}

      方法二:用匿名内部类的方式,重写接口的方法

Comparator c=new Comparator(){
     @override
     public int compare(Object o1,Object o2){
          Student s1=(Student)o1;
          Student s2=(Student)o2;
          return s1.getAge()-s2.getAge();
     }    
}

 

  

 

12集合(2)-----Set

标签:equal   ==   bsp   code   student   tor   不重复   包括   有一个   

原文地址:https://www.cnblogs.com/anzhilanxiao/p/10587346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!