您所在的位置:主页 > Java培训 >

最简单的Set集合与实现类HashSet语法详解

时间:2014-04-18 10:42来源:未知 作者:疯狂java 点击:

  Set(java.util.Set)是最简单的一种集合,集合中的对象没有顺序性,并且没有重复对象。Set接口主要有两个实现类HashSet和TreeSet。HashSet由哈希表(实际上)是一个HashMap实例)不保证Set的迭代顺序,特别是不保证该顺序恒久不变,并且只允许使用一个null元素;

  HashSet类得子类LinkHashSet类不仅实现哈希算法,而且实现链表数据结构。TreeSet类则实现了SortedSet接口,并且具有排序功能。Set集合中存储的是对象的引用,并且不允许存储重复对象,如果使用HashSet来实现Set集合,则集合中的对象没有顺序性;如果需要有序集合,则可以使用TreeSet来实现Set集合。下面代码是Set集合的使用实例。

  下面代码采用HashSet作为Set的实现类。分别创建3个字符变量s1、s2、s3,其中s2和s3的值都为acc,但是它们的内存地址不同。在set中通过add()方法加入s1和s2的引用,在加入s3的引用是,由于add()方法判断s3与s2相等,所以并不加入s3的引用,因此以上程序的输出结果为2。在add()方法中,加入s3的引用是,它会采用对象的equals()方法来比较两个对象是否相等。s2和s3变量虽然引用的是内存地址不同的字符串对象,但是通过s2.equals(s3)的比较结果为true,因此set认为它们是两个相等的对象。所以add()方法并不把s3引用的对象加入到集合中。

  HashSet是按照哈希算法来存取集合中的对象的,因此在加入元素是,要通过对象的哈希码值来计算对象在集合中的存储位置,所以如果通过equal()方法比较相等的两个对象,它们的哈希码值应该相等。在实际应用当中,有时需要重写equals()方法,比如在映射复合自然主键时,在主键类中可能有多个属性,所以在比较该主键类得对象是否相等是,要比较对象的各个属性值是否相等才能确定对象是否相等。在重写equals()方法时,为了保证对象的哈希码值得正确性,也必须重写hashCode()方法。

  Set set=new HashSet();

  Sring s1=new String("Hi");

  Sring s2=new String("acc");

  Sring s3=new String("acc");

  set.add(s1);

  set.add(s2);

  set.add(s3);

  System.out.println(set.size());