HashSet存对象是根据其hashCode值,TreeSet似乎跟平衡二叉树有点象,学数据结构的时候知道 hash表和平衡二叉树都是为了查询,修改,删除等操作时间复杂度低,具体多少忘了,呵呵.
    可是HashSet, TreeSet都只能用Iterator来顺序遍历,那如何表现出hash和二叉树的优越处呢? 比如说HashSet好象没有通过hashCode来找到对应元素的方法啊
    不知道该怎么理解?

解决方案 »

  1.   

    底层来说,HashSet是用Hash表来存储数据,而TreeSet是用二叉平衡树来存储数据。功能上来说,由于TreeSet实现了SortedSet接口,所以是一个有序的Set,可以使用SortedSet接口的first()、last()等方法。但由于要排序,势必要影响速度,所以,如果不需要顺序的话,还是使用HashSet吧,使用Hash表存储数据的HashSet在速度上更胜一筹。
      

  2.   

    楼上,你说的这些我都知道,我是不太明白如果要在HashSet 里查询某个对象,你怎么查?或者我要把某个hashset里的某个对象取出来,我怎么取?不还是要用iterator吗? 如果要用iterator,那要hashset有什么用?只是为存对象的时候快吗???
      

  3.   

    是的,hashset只是存储效率高。
      

  4.   

    楼主只要看一看HashSet和TreeSet这两个类的代码,就会明白了。
      

  5.   

    hashSet hashCode && equals
    TreeSet Comparable || Comparator
      

  6.   

    Hashset 和 TreeSet 都是用来储存数据的数据结构,Hashset高效但不带排序,TreeSet效率没Hashset高,但可以排序.....
    楼主要知道他们要来干什么就得复习下数据结构......
      

  7.   

    我自己看了下代码,其实HashSet 和TreeSet本身是Set, HashSet用hash表存元素,其实倒不一定快,直接用数组存不是更快吗?我用数组存,不提供随机访问方法不就是Set了吗?
      

  8.   

    to lz(ls):那当然是不一样的了,作为Set存放在里面的元素是不会重复的,而你用数组存的话,就有可能出现重复的东西,并不是不提供随机访问方法就是Set的。正如各位楼上所说的,HashSet是通过Hash值来存放的,TreeSet里面存放的是排序后的元素。