zoukankan      html  css  js  c++  java
  • Set

     

     Collection         一次存一个对象, 单列集合
      List           可重复, 有索引
       ArrayList      数组实现, 查找快
       LinkedList      链表实现, 增删快
       Vector         数组实现, 线程安全
      Set            不可重复, 没索引
       HashSet       使用哈希算法去重复, 效率高, 但元素无序
       TreeSet        TreeSet是用排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列
       LinkedHashSet  HashSet的子类, 原理相同, 除了去重复之外还能保留存储顺序

    set接口中的方法和collection中的方法一致
    set接口取出元素的方法只有迭代器
    HashSet
     1.HashSet原理
      我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低
      哈希算法提高了去重复的效率, 降低了使用equals()方法的次数
      当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象
       如果没有哈希值相同的对象就直接存入集合
       如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较
        比较结果为false就存入, true则不存
     2.将自定义类的对象存入HashSet去重复
      类中必须重写hashCode()和equals()方法
      hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
      equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储

    TreeSet
     1.特点
      TreeSet是用排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列

    TreeSet排序方式有两种。
    第一种让类实现compareable接口
    让元素自身具备比较性。其实是让元素实现Comparable接口,覆盖compareTo方法。这称为元素的自然排序。
    第二种定义一个比较器:
    当元素自身不具备比较性,或者元素具备的比较性不是所需要的,可以让集合自身具备比较性。
    其实就是定义一个类,实现Comparator接口。覆盖compare方法。
    将Comparator接口的子类对象作为参数传递给TreeSet的构造函数。
    当元素自身具备比较性,同时TreeSet集合也具备比较器,这时以比较器为主.
    a.自然顺序(Comparable)
       TreeSet类的add()方法中会把存入的对象强转成Comparable类型
       调用对象的compareTo()方法和集合中的对象比较
       根据compareTo()方法返回的结果进行存储
    b.比较器顺序(Comparator)
       创建TreeSet的时候可以制定 一个Comparator
       如果传入了Comparator, 那么TreeSet就不会按照自然顺序排序了
       add()方法内部会自动调用Comparator接口中compare()方法排序
    c.两种方式的区别
       TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
       TreeSet如果传入Comparator, 就优先按照Comparator

    迭代(遍历)
     1.List
      a.普通for循环, 使用get()逐个获取
      b.调用iterator()方法得到Iterator, 使用hasNext()和next()方法
      c.增强for循环, 只要可以使用Iterator的类都可以用
      d.Vector集合可以使用Enumeration的hasMoreElements()和nextElement()方法
     2.Set
      a.调用iterator()方法得到Iterator, 使用hasNext()和next()方法
      b.增强for循环, 只要可以使用Iterator的类都可以用

    总结:

    TreeSet:通过compareTo或者compare 方法

    根据返回值来判断元素的唯一性,返回是0,就视为同一个元素,返回正整数就视为比已有的元素大放右边,返回负数视为比已有的元素小放左边,返回元素是以二叉树的形式存放的。

     

  • 相关阅读:
    第72天: PySpider框架的使用
    第71天: Python Scrapy 项目实战
    Web前端资源汇总
    1201即将到来
    C#自定义事件模拟风吹草摇摆
    HTML5 Canvas爱心时钟代码
    CSS3圆环动态弹出菜单
    CSS3实现Loading动画特效
    HTML5优势
    CSS3扁平化Loading动画特效
  • 原文地址:https://www.cnblogs.com/sooper/p/3411167.html
Copyright © 2011-2022 走看看