zoukankan      html  css  js  c++  java
  • java容器

    1.容器的概念
    Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中,只能存放引用数据类型。
    集合和数组相似点:
    都可以存储多个对象,对外作为一个整体存在
    数组的缺点
    (1)长度必须在初始化时指定,且固定不变
    (2)数组采用连续存储空间,删除和添加效率低下
    (3)数组无法直接保存映射关系
    (4)数组缺乏封装,操作繁琐
    2.容器 API
    3.Collection 接口
    分为List和Set接口。
    Collection 接口存储一组不唯一,无序的对象(单个对象)
    集合作为容器应该具有的功能(增,删,改,查),
    不一定全有。
    集合的基本操作:增加,删除,判断,取出
    Collection 接口存储一组不唯一,无序的对象
    4.Iterator 接口
    所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。
    Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。
    ListIterator为Iterator接口的扩展,里面有许多Iterator没有的方法,可以解决iterator无法解决的并发修改的异常。
    5.Set 接口
    Set 接口存储一组唯一,无序的对象
    分为HashSet接口、LinkedHashSet接口、TreeSet接口
    (存入和取出的顺序不一定一致)
    操作数据的方法与List类似,Set接口不存在get()方法
    HashSet:采用Hashtable哈希表存储结构,底层数组结构使用的是hash表,主结构数组,+链表。
    创建HashSet时,底层创建的是一个HashMap对象,HashSet使用了HashMap的数据结构。
    优点:添加速度快,查询速度快,删除速度快
    缺点:无序
    使用HashSet存储对象,必须重写对象的hashcode和equals方法。
    LinkedHashSet
    采用哈希表存储结构,同时使用链表维护次序
    有序(添加顺序)
    TreeSet
    TreeSet的底层所使用的是TreeMap 数据结构为红黑树。
    二叉树:每个结点的度均不超过2的有序树。结点的度即该结点的分支数。

    采用二叉树(红黑树)的存储结构
    优点:有序(排序后的升序)查询速度比List快(二分查找)
    (按照内容查询)
    缺点:查询速度没有HashSet快
    按升序排序
    使用TreeSet存放自定义类型的对象会报错,原因是自定义的类中没有指定排序的方式
    解决方法:自定义的类实现Comparable 接口,实现compareTo方法
    外部比较器
    单独创建一个类 实现Comparator 来实现比较大小的功能,创建treeSet的对象的时候用一个外部比较器的对象进行构造
    内部比较器
    在比较的对象中重写Comparable方法来实现比较大小

    6.Comparable 接口
    7.List 接口
    List 接口存储一组不唯一,有序(插入顺序)的对象
    就是在Collection接口上添加了下标,在List接口中多了一些通过下标来操作元素的方法
    ArrayList实现了长度可变的数组,在内存中分配连续的空间。
    优点:遍历元素和随机访问元素的效率比较高
    缺点:添加和删除需要大量移动元素效率低,按照内容查询效率低
    LinkedList采用双向链表存储方式。
    优点:插入、删除元素时效率比较高
    缺点:遍历和随机访问元素效率低下
    listlterator接口用来获取查询元素。
    8.Map 接口
    Map接口存储一组键值对象,提供key到value的映射
    HashMap
    Key无序 唯一(Set)
    Value无序 不唯一(Collection)
    LinkedHashMap

    有序的HashMap
    hash表的存储原理
    hash表的主结构为数组
    1.调用hashCode()方法计算Hash码值
    2.根据y=k(x)这样的函数计算存储位置
    3.如果位置上没有元素,则将元素存储
    4.如果该位置上有元素,则需要调用equals方法比较内容是否相同。
    元素添加步骤:
    1.计算元素的哈希码值
    2.根据y=kx(除留取余法)或直接定址法、平方取中法、折叠法等哈希函数计算在哈希表中的存储位置,x:哈希码,y:在哈希表的存储位置。
    3.如果该位置上有元素,使用equals方法判断该元素是否重复。如果重复,直接删除,如果不重复执行第4步。
    4.将该元素用节点(链表)的方式与该位置其它元素的地址连接,再放入该存储位置。
    从JDK1.8开始,当链表的个数大于等于8时,将用红黑树连接。

    TreeMap
    有序 速度没有hash快
    底层采用红黑树(接近平衡二叉树)数据结构
    使用TreeMap存储自定义对象做为key时,要求必须具备比较规则,否则程序报错。

    获取map中的所有键 map中的键不能重复,同时又没有顺序,所以map中的所有键构成一个set集合
    获取map中的所有值 map中的value可以重复,同时又没有顺序,所以map中的所有值构成一个collection集合

  • 相关阅读:
    fb 4.7英文版 显示行数
    《笨办法学Python》 第40课手记
    《笨办法学Python》 第39课手记
    《笨办法学Python》 第38课手记
    《笨办法学Python》 第37课手记
    《笨办法学Python》 第36课手记
    《笨办法学Python》 第35课手记
    《笨办法学Python》 第34课手记
    《笨办法学Python》 第33课手记
    Js获取当前日期时间及其它操作(转)
  • 原文地址:https://www.cnblogs.com/cn-boya/p/10842442.html
Copyright © 2011-2022 走看看