Set类、Collections

来源:互联网 发布:淘宝店突然没生意了 编辑:程序博客网 时间:2024/06/08 02:59

    一、Set

    元素无序(指存储和取出的顺序)、唯一

    1HashSet

    不保证元素的迭代顺序,并且不保证该顺序恒久不变。

    怎么保证按顺序呢?

    HashSet底层数据是哈希表。依赖两个方法:hashCode()equals()

    重写hashCode()

    public int hashCode(){

    return this.name.hashCode() + this.age;

    }

    重写equals()

    public boolean equals(Object obj){

    if(this == obj){return true;}

    if(!(obj instanceOf Student)){return false;}

    Student s = (Student)obj;

    return this.name.equals(s.name) && this.age == s.age;

    }

     

    2,TreeSet

    根据构造方法的不同,选择使用自然排序或者比较器排序。

    按照实际的需求,可以对元素进行排序,并且保证唯一。

    怎么保证呢?两种方法:

    A:元素具备比较性;自然排序

    TreeSet的无参构造,要求对象所属的类实现Comparable接口。

    B:集合具备比较性;比较器排序

    TreeSet的带参构造,要求构造方法接收一个实现了Comparator接口的对象。唯一,根据返回值是否为0.

     

     

     

    二、

    Collection体系的集合总结

     

    Collection

    List

    ArrayList——底层数据结构是数组,查询快,增删慢。

    线程不安全,效率高

     

     

    LinkedList——底层数据结构是链表,查询慢,增删快。

    线程不安全,效率高。

     

     

    Vector——底层是数组,查询快,增删慢。

    线程安全,效率低。

     

    Set

    HashSet——底层数据结构是哈希表。

    使用hashCode()equals()保证元素唯一性。

     

     

    TreeSet——底层数据结构是二叉树。

    使用自然排序,实现Comparable接口;或者使用比较器实现Comparator接口;保证元素唯一、有序。

     

     

     

      

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    三、

    Collections

    是针对Collection集合操作的工具类

     

    面试题:CollectionCollections的区别?

    Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

    功能:

    1) 排序(Sort)

    使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此列表内的所有元素都必须是使用指定比较器可相互比较的

    2) 混排(Shuffling)

    混排算法所做的正好与 sort 相反: 它打乱在一个 List 中可能有的任何排列的踪迹。也就是说,基于随机源的输入重排该 List, 这样的排列具有相同的可能性(假设随机源是公正的)。这个算法在实现一个碰运气的游戏中是非常有用的。例如,它可被用来混排代表一副牌的 Card 对象的一个 List 。另外,在生成测试案例时,它也是十分有用的。

    3) 反转(Reverse)

           使用Reverse方法可以根据元素的自然顺序对指定列表按降序进行排序。

    4) Rotate

    根据指定的距离循环移动指定列表中的元素

     

     

     

     

     

     

     

     

     

     

     

     

     

0 0