• 神秘的Java集合与UML


    🧸🧸UML

    UML概念:

      统一建模语言(Unified Modeling Language——UML)是一种面向对象的建模语言,它可以实现大型复杂系统各种成分描述的可视化、说明并构造系统模型,以及建立各种所需的文档,是一种定义良好、易于表达、功能强大且普遍适用的建模语言。  统一建模语言(Unified Modeling Language——UML)是一种面向对象的建模语言,它可以实现大型复杂系统各种成分描述的可视化、说明并构造系统模型,以及建立各种所需的文档,是一种定义良好、易于表达、功能强大且普遍适用的建模语言。

    UML解析图:

    基本内容:

    基本结构:

     

     作用:

      UML的作用就是从静态和动态方面用模型图来从各个角度全面描述要开发的系统,为人们提供一套功能强大的捕获信息技术要点的工具。

    UML关系

    在UML类图中,常见的有以下几种关系:泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)

    •  关联

    描述了一个或多个类之间的结构性关系;

    雇员与雇主,公司与员工的关联关系,1表示一个人只能一个公司,*表示一个公司可以有多个员

    工;

    关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子

    关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

    【代码体现】:成员变量

    【箭头及指向】:带普通箭头的实心线,指向被拥有者


    •  依赖

     依赖关系描述两个模型元素(类、用例等)之间的语义关系,非独立元素依赖独立元素;

    【依赖关系】:是一种使用的关系,所以要尽量不使用双向的互相依赖

    【代码表现】:局部变量、方法的参数或者对静态方法的调用

    【箭头及指向】:带箭头的虚线,指向被使用者


    •  泛化 

    定义一般元素与特殊元素的分类关系; 

    【泛化关系】:是一种继承关系,它指定了子类如何特化父类的所有特征和行为例如:老虎是动物的一种.

    【箭头指向】:带三角箭头的实线,箭头指向父类

     


    •  实现 

     一个元素描述了另一个元素保证实现的契约;

    【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现

    【箭头指向】:带三角箭头的虚线,箭头指向接口


    •  聚合 

    【聚合关系】:是整体与部分的关系.如车和轮胎是整体和部分的关系.

    聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

    【代码体现】:成员变量

    【箭头及指向】:带空心菱形的实心线,菱形指向整体


    • 组合 

    【组合关系】:是整体与部分的关系.,没有公司就不存在部门      组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期

    【代码体现】:成员变量

    【箭头及指向】:带实心菱形的实线,菱形指向整体


    各种关系的强弱顺序:

    泛化实现组合聚合关联依赖


    🧸🧸List

    特点:元素有序,且可重复 

    遍历:下标,foreach,迭代器 

    扩容:

    • 初始容量10,负载因子0.5,扩容增量0.5倍
    • 新容量 = 原容量 + 原容量 * 0.5  , 如 ArrayList的容量为10,一次扩容后是容量为15

    实现:

     ArrayList

    • 简单数据结构,超出容量自动扩容,动态数组
    • 内部实现是基于基础的对象数组的
    • 随机访问快
    • 不适合随机增加或删除
    • 线程不安全

    LinkedList

    • 线程不安全
    • LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部
    • LinkedList可被用作堆栈(stack)【包括了push,pop方法】,队列(queue)或双向队列(deque)
    • 以双向链表实现,链表无容量限制,允许元素为null,线程不安全
    • 适合做随机的增加或删除

    Vector

    • 线程安全

    • 并行性能慢,不建议使用

    CopyOnWriteArrayList

    • 写时复制
    • 线程安全
    • 适合于读多,写少的场景
    • 写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给array
    • 比Vector性能高
    • 最终一致性
    • 实现了List接口,使用方式与ArrayList类似

    🧸🧸set

    特点:无序,不重复

    遍历:foreach,迭代器

    扩容: 初始容量16,负载因子0.75,扩容增量1倍

    实现

    HashSet

    • 它存储唯一元素并允许空值   依据对象的hashcode来确定该元素是否存在

    • 由HashMap支持

    • 不保持插入顺序

    • 非线程安全

    • 性能参数:初始容量,负载因子 

    •  默认值: 初始容量16,负载因子0.75   示例:new HashSet<>(20, 0.5f);

    TreeSet

    • 是一个包含有序的且没有重复元素的集合
    • 作用是提供有序的Set集合,自然排序或者根据提供的Comparator进行排序
    • TreeSet是基于TreeMap实现的

    🧸🧸Map

     特点:

    • 无序,键值对,键不能重复,值可以重复,
    • 键重复则覆盖,没有继承Collection接口

     扩容:初始容量16,负载因子0.75,扩容增量1倍

    遍历:

    • 先获取所有键的Set集合,再遍历(通过键获取值)
    • 键重复则覆盖,没有继承Collection接口

    实现

    HashMap

    • 线程不安全,最常用,速度快
    • 内部采用数组来存放数据

    基本原理 

    put执行过程

     Table数组中的的Node

    • 链表结构示意图

    •  红黑树结构示意图 

     HashTable

    • 线程安全,不太常用

    ConcurrentHashMap

    • 线程安全,比HashTable性能高

    TreeMap 

    • key值按一定的顺序排序
    • 添加或获取元素时性能较HashMap慢    因为需求维护内部的红黑树,用于保证key值的顺序

     LinkedHashMap

    • 继承HashMap
    • LinkedHashMap是有序的,且默认为插入顺序   当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了
    1. Map<String, String> linkedHashMap = new LinkedHashMap<>();
    2. linkedHashMap.put("name1", "josan1");
    3. linkedHashMap.put("name2", "josan2");
    4. linkedHashMap.put("name3", "josan3");
    5. Set<Entry<String, String>> set = linkedHashMap.entrySet();
    6. Iterator<Entry<String, String>> iterator = set.iterator();
    7. while(iterator.hasNext()) {
    8. Entry entry = iterator.next();
    9. String key = (String) entry.getKey();
    10. String value = (String) entry.getValue();
    11. System.out.println("key:" + key + ",value:" + value);
    12. }

     排序

    • java.lang.Comparable
    • java.util.Comparator

     工具类

    • Collections    提供一组静态方法操作集合
    • Arrays     提供一组静态方法操作数组

    今天的知识就到此为止啦,精彩下期继续哦😜😜 有什么疑问可以在评论区留言或者私信博主哦。

  • 相关阅读:
    Perforce 使用建议
    C Primer Plus(6) 中文版 第6章 C控制语句:循环 6.12 使用函数返回值的循环示例
    【前沿】数据目录是什么?您为何需要它?
    redis的事务
    Formality总结
    线性代数学习笔记7-4:马尔可夫矩阵、矩阵幂的稳态问题
    sklearn笔记:neighbors.NearestNeighbors
    ESP8266-Arduino编程实例-DS3231实时时钟(RTC)驱动
    2023 柏鹭杯 --- Crypto fractrsa wp
    学习WiFi,怎么入手?
  • 原文地址:https://blog.csdn.net/weixin_65474399/article/details/125536141