TreeSet和HashSet

时间:2015-10-01 04:28:59

标签: java collections set hashset treeset

为什么HashSet也能成为以下问题的答案?当我测试代码时,HashSetTreeSet都给出了相同的输出,但看起来正确的答案是TreeSet。代码如下:

import java.util.*;

public class Example {
    public static void main(String[] args) {
        // insert code here
        set.add(new Integer(2));
        set.add(new Integer(1));
        System.out.println(set);
    }
}
  

在第4行插入的代码可以保证此程序可以使用   输出[1,2]?

     
      
  1. Set set = new TreeSet();
  2.   
  3. Set set = new HashSet();
  4.   
  5. Set set = new SortedSet();
  6.   
  7. List set = new SortedList();
  8.   
  9. Set set = new LinkedHashSet();
  10.   

3 个答案:

答案 0 :(得分:2)

HashSet unordered ,这特别意味着Java不保证存储密钥(以及因此值)的顺序。另一方面,TreeSet以自然顺序存储其元素。

来自TreeSet的{​​{3}}:

  

元素按照其自然顺序排序,或者在创建时创建时提供的比较器,具体取决于使用的构造函数。   如果对象不能   按自然顺序排序比使用compareTo()方法对TreeSet对象的元素进行排序,但hashmap使用equals()方法来比较元素。

答案 1 :(得分:1)

选择是:

  1. Set set = new TreeSet();
  2. 根据doc

      

    元素按照它们的自然顺序排序,或者用   比较器在创建时设置,具体取决于哪个   使用构造函数。

    因此,这是正确答案,因为插入后自然排序为[1,2]

    1. Set set = new HashSet(); HashSet未订购,因此也不保证自然排序。这不是正确答案。

    2. Set set = new SortedSet(); SortedSet是一个界面。

    3. List set = new SortedList(); 由于显而易见的原因,这绝对不是正确答案。

    4. Set set = new LinkedHashSet(); Set接口的哈希表和链表实现,具有可预测的迭代顺序。在这种情况下,输出将是[2,1]

答案 2 :(得分:1)

  
      
  1. TreeSet
  2.   

是的,因为2是一个有序集合,密钥11的自然顺序为2Set set = new HashSet();

  
      
  1. HashSet
  2.   

Set set = new SortedSet();不保证任何订单。

  
      
  1. SortedSet
  2.   

编译错误:List set = new SortedList();是一个接口,无法实例化。

  
      
  1. SortedList
  2.   

编译错误:Java中没有标准Set set = new LinkedHashSet();类。

  
      
  1. 2
  2.   

订单保证为1String separator = System.lineSeparator(); display.setText(manu + separator + brand + separator + year + separator + price); (广告订单)。