Android中需要了解的数据结构(四)

栏目: IOS · Android · 发布时间: 7年前

public interface Set<E> extends Collection<E> {}
Set是一个继承于Collection的接口,Set是一种不包括重复元素的Collection。它维持它自己的内部排序,所以随机访问没有任何意义。它允许null的存在但是仅有一个。由于Set接口的特殊性,所有传入Set集合中的元素都必须不同。

  • HashSet

    public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable {
          private transient HashMap<E,Object> map;
          private static final Object PRESENT = new Object();
       
          public boolean add(E e) {
              return map.put(e, PRESENT)==null;
          }
      }
    复制代码

    HashSet实现Set接口,基于HashMap实现,底层使用HashMap保存数据。 非线程安全。

    HashSet是将数据存放到HashMap的Key中,再以PRESENT来作为值,来保证来唯一性。

    HashSet查找效率很高,它内部元素的顺序是由hashcode来决定的,所以它不保证set的迭代顺序。

    ArrayList中的两个元素是否相同,需要重写equals方法。而对于HashSet,除了要重写存入对象的equals方法外,还需要重写hashCode方法,保证HashSet中没有相同的两个对象,这点是和HashMap一样的。

  • LinkedHashSet

    public class LinkedHashSet<E> extends HashSet<E>
              implements Set<E>, Cloneable, java.io.Serializable
    复制代码

    LinkedHashSet是HashSet的子类,LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的。

    LinkedHashSet内部使用LinkedHashMap实现,所以它和HashSet的关系就相当于HashMap和LinkedHashMap的关系。当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。

  • TreeSet:

    public class TreeSet<E> extends AbstractSet<E>
          implements NavigableSet<E>, Cloneable, java.io.Serializable{}
    复制代码

    TreeSet是二叉树实现的,基于TreeMap,生成一个总是处于 排序 状态的set,内部以TreeMap来实现,不允许放入null值。它是使用元素的自然顺序对元素进行排序,或者根据创建Set时提供的 Comparator 进行排序,具体取决于使用的构造方法。

HashSet、LinkedHashSet与TreeSet的区别,应用场景是什么?

  • HashSet:基于hashMap实现,非线程安全,允许插入null,查找效率高。适合查找操作频繁的场景。
  • LinkedHashSet:基于hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起来像是以插入顺序保存的。
  • TreeSet:基于二叉树实现,非线程安全,可以按照自然顺序或者自定义顺序自动排序,不允许插入null值。适合需要排序的场景。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

第四次革命

第四次革命

[意]卢西亚诺•弗洛里迪(Luciano Floridi)著 / 王文革 / 浙江人民出版社 / 2016-5 / 64.90元

 随着线上线下大融合以及人工智能的极大发展,人类已经进入超历史时代。在这一时代中,人类终于迎来了继哥白尼革命、达尔文革命、神经科学革命之后自我认知的第四次革命——图灵革命,整个世界正化身为一个信息圈,每个人都生活在云端,人类已不再是信息圈毋庸置疑的主宰。毫无疑问,图灵革命引爆了人工智能重塑整个人类社会的序曲!  那么在人工智能时代,人类如何保证自己最钟爱的财富——“隐私”不被窃取?如何应......一起来看看 《第四次革命》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具