zoukankan      html  css  js  c++  java
  • java集合

    java的集合类主要有两个接口派生而出,分别为:Collection和Map

    Collection接口、子接口及实现类的继承数为:

    1、Set集合 (不允许包含相同元素)

    有三个实现类,分别为HashSet、TreeSet、EnumSet

    1.1、HashSet

    按照Hash算法来存储集合中的元素,因此具有很好的存取和查找性能

    特点:

    • 顺序与添加顺序不同,可能发生变化
    • 不是同步的,多个线程如果访问同一个HashSet,同时修改时,必须用代码保持同步
    • 集合元素值可以为null

    当在HashSet中加入一个元素时,会调用Hashcode()方法计算hashcode的值,然后决定存储的位置

    如果两个元素调用equals()返回true,hashcode不同时,会存储在不同的位置

    HashSet集合判断两个元素相等的标准是:通过equals()返回true,且hashcode方法的返回值相等,所以重写equals()和hashcode()时要保证equals()返回true时,hashcode值相同

    当程序把可变对象添加到HashSet后,金莲不要修改参与计算hashcode()equals()的实例变量,否则将导致hashset无法正确操作这些集合元素

    1.2、LinkedHashSet类是HashSet的子类

    使用链表维护了元素的插入顺序,但是存储位置还是根据hashcode值确定

    1.3、TreeSet是SortesSet接口的实现类,确保元素处于排序状态

    • 自然排序
    • 定制排序

    当一个元素加入到TreeSet中时,调用CompareTo(Object object)方法与容器中的其他对象进行比较,如果相等,则不能插入

    判断两个元素是否相等的标准是:两个对象通过CompareTo(Object object)是否返回0,如果返回0则相等

    重写CompareTo(Object object)规则:当equals()方法返回true时,CompareTo(Object object)必须返回0

    1.4、EnumSet为枚举类设计的集合类

    有序

    不能加入null

    Set实现类性能比较

    HashSet比TreeSet性能好(特别是常用添加和查询操作时)因为TreeSet需要额外的红黑树算法维护集合元素的次序

    LinkedHashSet在执行插入删除操作时比HashSet性能差,遍历时更快一些

    EunmSet是性能最好的,但是只能保存同一个枚举类的枚举值作为集合元素

    HashSet、TreeSet、EunmSet三个Set实现类都是线程不安全的

    2、List集合(元素有序,可重复)ArrayList和vector两个实现类

    • ArrayList线程不安全
    • vector提供了Stack子类

    3、Queue集合

    3.1、PriorityQueue实现类

    保存队列元素的顺序并不是安加入队列的元素,可是根据元素大小重新排序,也有两种排序方式,自然排序和定制排序

    3.2、Deaue接口和ArrayDeque实现类

    Deque是Queue的子接口,代表一个双端队列

    不仅可以当做队列使用,还可以当做栈一样使用,提供了push()和pop()方法

    3.3、LinkedList实现类

    LinkedList不仅实现了List接口还实现了Deque接口,也可当做双端队列使用

    内部以链表的形式存储数据,随机访问性能不好,但是插入和删除时比ArrayList和ArrayDeque性能好

    Map集合(HashMap和HashTable)

    两者不能保证元素的顺序一样,判断两个key相等的标准是:equals()返回true,且hashcode值也要相等

    判断两个value相等的标准仅需要equals()返回true即可

    HashMap和HashTable区别:

    • HashMap在存在key冲突时依然有较好的性能
    • HashTable是线程安全的,HashTable是线程不安全的
    • HashTable不允许使用null,HashSet可以使用Null

    1.1、LinkedHashMap是HashMap的子类,需要维护元素的插入顺序

    1.2、TreeMap实现类,红黑树结构,根据key值进行排序

    1.3、WeakHashMap实现类

    与HashMap用法基本相似,区别是HashMapde的key值保留了对实际对象的强引用,意味着只要HashMap对象不被销毁,所有key所引用的对象不会被垃圾回收

    WeakHashMap对key保留弱引用,只要对象中的key所引用的对象没有被其他强引用变量引用,则这些key所引用的对象可能被垃圾回收,WeakHashMap也可能自动删除这些key所对应的key-value对

  • 相关阅读:
    iOS App Store审核上传应用预览视频
    mac 下常用命令(xcode常用命令,环境相关等)
    Xcode遇到的一些常见异常
    Tomcat的SSL配置keytool生成证书
    iOS Developer TODO
    Linix常用命令
    iOS&OSX系统初步了解
    Mac下安装MySQL及启动等常用命令
    Android WebView存在跨域访问漏洞(CNVD-2017-36682)介绍及解决
    HTML5 Audio/Video 标签,属性,方法,事件汇总 (转)
  • 原文地址:https://www.cnblogs.com/lili-work/p/9568087.html
Copyright © 2011-2022 走看看