• Java的数据存储机制


    1. Java集合概述

    Java 集合可分为 Collection 和 Map 两种体系
    (1) Collection接口:

    • Set:元素无序、不可重复的集合(高中的集合)
    • List:元素有序,可重复的集合(动态数组)

    (2) Map接口:具有映射关系“key-value对”的集合(函数)

    2. Collection 接口

    • Collection 接口是 List、Set 和 Queue 接口的父接口,该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合。
    • JDK不提供此接口的任何直接实现,而是提供更具体的子接口(如:Set和List)实现。
    • 在 Java5 之前,Java 集合会丢失容器中所有对象的数据类型,把所有对象都当成 Object 类型处理;从 Java5 增加了泛型以后,Java 集合可以记住容器中对象的数据类型

    3. Iterator 接口遍历元素

    • Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。
    • 所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象。
    • Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。如果需要创建 Iterator 对象,则必须有一个被迭代的集合。

    4. Iterator接口的方法

    • hasNext
    • next
    • remove

    在调用it.next()方法之前必须要调用it.hasNext()进行检测.若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常.

    5. List接口

    List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。
    List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
    JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。

    6. List接口操作集合元素的方法

    插入:void add(int index, Object ele)
    boolean addAll(int index, Collection eles)
    Object get(int index)
    int indexOf(Object obj)
    int lastIndexOf(Object obj)
    删除:Object remove(int index)
    修改:Object set(int index, Object ele)
    List subList(int fromIndex, int toIndex)

    7. List实现类之一: ArrayList

    ArrayList 是 List 接口的典型实现类
    本质上,ArrayList是对象引用的一个变长数组
    ArrayList 是线程不安全的,而 Vector 是线程安全的,即使为保证 List 集合线程安全,也不推荐使用Vector

    Arrays.asList(…) 方法返回的 List 集合既不是 ArrayList 实例,也不是 Vector 实例。 Arrays.asList(…) 返回值是一个固定长度的 List 集合

    8. List实现类之二:LinkedList

    对于频繁的插入或删除元素的操作,建议使用LinkedList类,效率较高

    新增方法:

    void addFirst(Object obj)

    void addLast(Object obj)

    Object getFirst()

    Object getLast()

    Object removeFirst()

    Object removeLast()

    在各种list中,最好把ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList;

    9. Iterator和ListIterator主要区别

    • ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历。但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。
    • ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator 没有此功能。
    • ListIterator有add()方法,可以向List中插入对象,而Iterator不能。
    • 都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iterator仅能遍历,不能修改。因为ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作。

    10. Set接口

    • Set接口是Collection的子接口,set接口没有提供额外的方法
    • Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败。
    • Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法

    11. HashSet

    • HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。
    • HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。
    • 当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据 hashCode 值决定该对象在 HashSet 中的存储位置。
    • HashSet 集合判断两个元素相等的标准:两个对象通过 equals() 方法比较相等,并且两个对象的 hashCode() 方法返回值也相等。
    • HashSet 具有以下特点:

        (1) 不能保证元素的排列顺序

        (2) HashSet 不是线程安全的

        (3) 集合元素可以是 null

    12. LinkedHashSet

    • LinkedHashSet 是 HashSet 的子类
    • LinkedHashSet 根据元素的 hashCode 值来决定元素的存储位置,但它同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的。
    • LinkedHashSet插入性能略低于 HashSet,但在迭代访问 Set 里的全部元素时有很好的性能。
    • LinkedHashSet 不允许集合元素重复。

    13. Map接口

    • Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value
    • Map 中的 key 和  value 都可以是任何引用类型的数据
    • Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应的类,须重写hashCode()和equals()方法。
    • 常用String类作为Map的“键”。
    • key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 value。

    14. HashMap

    • Map接口的常用实现类:HashMap、TreeMap和Properties。
    • HashMap是 Map 接口使用频率最高的实现类。
    • 允许使用null键和null值,与HashSet一样,不保证映射的顺序。
    • HashMap 判断两个 key 相等的标准是:两个 key 通过 equals() 方法返回 true,hashCode 值也相等。
    • HashMap 判断两个 value相等的标准是:两个 value 通过 equals() 方法返回 true。

    15. LinkedHashMap

    • LinkedHashMap 是 HashMap 的子类
    • 与LinkedHashSet类似,LinkedHashMap 可以维护 Map 的迭代顺序:迭代顺序与 Key-Value 对的插入顺序一致.

    16. Properties

    • Properties 类是 Hashtable 的子类,该对象用于处理属性文件
    • 由于属性文件里的 key、value 都是字符串类型,所以 Properties 里的 key 和 value 都是字符串类型
    • 存取数据时,建议使用setProperty(String key,String value)方法和getProperty(String key)方法
  • 相关阅读:
    Mybatis3详解(一)----Mybatis的介绍
    【k8s】svc-sessionAffinityConfig
    【k8s】svc-sessionAffinity
    【k8s】svc-selector
    【k8s】svc-publishNotReadyAddresses
    【k8s】svc-ports
    【k8s】svc-externalIPs
    【k8s】svc-clusterIPs
    【k8s】svc-clusterIP
    【k8s】Service
  • 原文地址:https://www.cnblogs.com/fengze/p/6575806.html
Copyright © 2020-2023  润新知