zoukankan      html  css  js  c++  java
  • 五、Set接口


    Set集合也相当于是一个容器,一旦把对象丢进容器中,集合中的多个对象之间没有明显的顺序
    Set集合不允许重复元素进行添加,如果试图将两个相同的元素添加到一个Set集合中的时候,则add方法会返回false

    1.HashSet
    是Set接口的实现类,大多数如果要选用Set集合,一般直接选用HashSet

    特点:
    a.排重的【同一个元素不能重复添加,依靠hashCode()和equals()方法进行排重】
    原理:如果两个对象的hashCode()值相同,并且通过equals()比较的结果返回是true,那么HashSet会认为这两个对象时同一个对象,在添加的时候只会添加一次
    b.无序的【元素添加的顺序和底层存储的顺序不同,并不是随机的,是一套算法计算出来的,这个顺序并不是一成不变的,而是随时会发生改变】
    c.底层存储采用的数据结构是哈希算法【具有很好的存取和查找性能】
    原理:数组可以通过索引访问对应的元素,索引指出了元素在内存中存储的位置,而HashSet没有索引的,所以hashCode相当于是数组中的索引,决定每个元素在内存中的地址
    d.HashSet不是同步的,如果多个线程访问同一个HashSet的时候,徐要考虑保证线程的同步


    2.LinkedHashSet
    LinkedHashSet是HashSet的子类,使用的方式和HashSet类似

    特点:
    a.排重的【依靠hashCode和equals方法】
    b.有序的
    c.底层存储采用的数据结构是:链表【类似LinkedList】


    3.TreeSet
    TreeSet是Set集合的一个实现类,同时也是SortedSet【作用:主要负责排序】的唯一实现类,它可以确保元素处于一个排序状态

    特点:
    a.排重的【排重方式:在排序的同时,会完成排序,排序方式:自然排序和定制排序】
    b.有序的【元素添加到集合中,会按照特定的顺序进行排序,会按照排序后的顺序进行存储】
    c.底层存储采用的数据结构:二叉树【红黑树】

    排序方式:
    自然排序:Treeset中添加元素的时候,会默认调用Compareble接口中的compareTo()方法,作用主要是为了比较大小,从而达到排序的效果【默认全部是升序的】

    排序规则:只针对的是自定义的类
    对于系统的一些类,已经重写过了compareTo()方法,比如String,Integer,Character,Data...【默认都是升序排序的】
    obj1 int compareTo(Object obj2) :比较此对象与指定对象的顺序。

    排序的同时排重: (x.compareTo(y)==0) == (x.equals(y))


    正整数:obj1 > obj2
    负整数:obj1 < obj2
    0:obj1 == obj2【相当于obj1.equals(obj2) = true】

  • 相关阅读:
    js入门2计算平方
    js入门1
    html入门
    表单的例
    sql概述
    关联规则
    回归分析——logic回归
    聚类分析——动态聚类(K-means)
    聚类分析——层次聚类
    创建一个用递归算法求a的b次方的函数
  • 原文地址:https://www.cnblogs.com/lsp-lsp/p/7344063.html
Copyright © 2011-2022 走看看