From 0b2ab04d3f35c46c159e9a9d31d63d2413af4d08 Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Tue, 7 Jun 2022 17:15:01 +0800 Subject: [PATCH 01/15] Update JAVA.md --- JAVA.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/JAVA.md b/JAVA.md index c53b8ca..53b7bd8 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1012,7 +1012,7 @@ class LRUCache { 1.类名.class(就是一份字节码) 2.Class.forName(String className);根据一个类的全限定名来构建Class对象 - 3.每一个对象多有getClass()方法:obj.getClass();返回对象的真实类型 + 3.每一个对象都有getClass()方法:obj.getClass();返回对象的真实类型 **使用场景:** @@ -6276,4 +6276,4 @@ Raft使用**心跳机制**来触发选举。当server启动时,初始状态都 - 基于JWT的Token,数据从cache或者数据库中获取 - 基于Tomcat的Redis,简单配置conf文件 -- 基于Spring的Redis,支持SpringCloud和Springb \ No newline at end of file +- 基于Spring的Redis,支持SpringCloud和Springb From 1eb1fcb8a84ae5201e1d0e83a824ee3949e21c79 Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Tue, 7 Jun 2022 17:35:45 +0800 Subject: [PATCH 02/15] Update JAVA.md --- JAVA.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/JAVA.md b/JAVA.md index 53b7bd8..fa10457 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1061,6 +1061,8 @@ Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Err ### 数据结构 ![JavaCollection](https://tva1.sinaimg.cn/large/008eGmZEly1goe17hajvzj316d0lhju3.jpg) +![集合框架体系如图所示](https://www.runoob.com/wp-content/uploads/2014/01/java-coll-2020-11-16.png) +参考:https://www.runoob.com/java/java-collections.html #### **1、ArrayList和LinkedList** From c2ebb6a45468a3dd852c2dfde6149215535312e3 Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Tue, 7 Jun 2022 17:40:26 +0800 Subject: [PATCH 03/15] Update JAVA.md --- JAVA.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/JAVA.md b/JAVA.md index fa10457..1b69781 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1059,10 +1059,17 @@ Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Err ### 数据结构 - -![JavaCollection](https://tva1.sinaimg.cn/large/008eGmZEly1goe17hajvzj316d0lhju3.jpg) + +Java集合框架
+![JavaCollection](https://tva1.sinaimg.cn/large/008eGmZEly1goe17hajvzj316d0lhju3.jpg) +
从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。 +
集合框架体系如图所示
![集合框架体系如图所示](https://www.runoob.com/wp-content/uploads/2014/01/java-coll-2020-11-16.png) -参考:https://www.runoob.com/java/java-collections.html +
参考:https://www.runoob.com/java/java-collections.html +
集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容: +
接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象 +
实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。 +
算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。 #### **1、ArrayList和LinkedList** From 7dd5e6eaeb729e7223bfa8fb7dd36342b8b5a95c Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Tue, 7 Jun 2022 17:43:53 +0800 Subject: [PATCH 04/15] Update JAVA.md --- JAVA.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/JAVA.md b/JAVA.md index 1b69781..8dde31a 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1062,14 +1062,16 @@ Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Err Java集合框架
![JavaCollection](https://tva1.sinaimg.cn/large/008eGmZEly1goe17hajvzj316d0lhju3.jpg) -
从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。 +
从上面的集合框架图可以看到,**Java 集合框架主要包括两种类型的容器** +​ 一种是集合(Collection),存储一个元素集合 +​ 另一种是图(Map),存储键/值对映射。
集合框架体系如图所示
![集合框架体系如图所示](https://www.runoob.com/wp-content/uploads/2014/01/java-coll-2020-11-16.png)
参考:https://www.runoob.com/java/java-collections.html -
集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容: -
接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象 -
实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。 -
算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。 +
集合框架是一个用来代表和操纵集合的统一架构。**所有的集合框架都包含如下内容**: +​ 接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象 +​ 实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。 +​ 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。 #### **1、ArrayList和LinkedList** From 6294f4bb5f0539f3411ec279a663a1731c155a67 Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Tue, 7 Jun 2022 17:45:32 +0800 Subject: [PATCH 05/15] Update JAVA.md --- JAVA.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/JAVA.md b/JAVA.md index 8dde31a..3ab922d 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1062,13 +1062,15 @@ Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Err Java集合框架
![JavaCollection](https://tva1.sinaimg.cn/large/008eGmZEly1goe17hajvzj316d0lhju3.jpg) -
从上面的集合框架图可以看到,**Java 集合框架主要包括两种类型的容器** +
从上面的集合框架图可以看到 +**Java 集合框架主要包括两种类型的容器** ​ 一种是集合(Collection),存储一个元素集合 ​ 另一种是图(Map),存储键/值对映射。
集合框架体系如图所示
![集合框架体系如图所示](https://www.runoob.com/wp-content/uploads/2014/01/java-coll-2020-11-16.png)
参考:https://www.runoob.com/java/java-collections.html -
集合框架是一个用来代表和操纵集合的统一架构。**所有的集合框架都包含如下内容**: +
集合框架是一个用来代表和操纵集合的统一架构。 +**所有的集合框架都包含如下内容**: ​ 接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象 ​ 实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。 ​ 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。 From 1923e1ccdf84bd41d7a4a12aad1cd428c6d5a8fa Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Tue, 7 Jun 2022 17:47:38 +0800 Subject: [PATCH 06/15] Update JAVA.md --- JAVA.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/JAVA.md b/JAVA.md index 3ab922d..749789b 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1063,16 +1063,24 @@ Throwable 是 Java 语言中所有错误或异常的超类。下一层分为 Err Java集合框架
![JavaCollection](https://tva1.sinaimg.cn/large/008eGmZEly1goe17hajvzj316d0lhju3.jpg)
从上面的集合框架图可以看到 + **Java 集合框架主要包括两种类型的容器** + ​ 一种是集合(Collection),存储一个元素集合 + ​ 另一种是图(Map),存储键/值对映射。 +
集合框架体系如图所示
![集合框架体系如图所示](https://www.runoob.com/wp-content/uploads/2014/01/java-coll-2020-11-16.png)
参考:https://www.runoob.com/java/java-collections.html
集合框架是一个用来代表和操纵集合的统一架构。 -**所有的集合框架都包含如下内容**: + +**所有的集合框架都包含如下内容:**: + ​ 接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象 + ​ 实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。 + ​ 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。 #### **1、ArrayList和LinkedList** From 923f470b9a786fe389978dae8cbfee6308a9ab7a Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Tue, 7 Jun 2022 17:48:35 +0800 Subject: [PATCH 07/15] Update JAVA.md --- JAVA.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/JAVA.md b/JAVA.md index 749789b..0409131 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1066,9 +1066,9 @@ Java集合框架
**Java 集合框架主要包括两种类型的容器** -​ 一种是集合(Collection),存储一个元素集合 +​ 1.一种是集合(Collection),存储一个元素集合 -​ 另一种是图(Map),存储键/值对映射。 +​ 2.另一种是图(Map),存储键/值对映射。
集合框架体系如图所示
![集合框架体系如图所示](https://www.runoob.com/wp-content/uploads/2014/01/java-coll-2020-11-16.png) @@ -1077,11 +1077,11 @@ Java集合框架
**所有的集合框架都包含如下内容:**: -​ 接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象 +​ 1.接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象 -​ 实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。 +​ 2.实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。 -​ 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。 +​ 3.算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。 #### **1、ArrayList和LinkedList** From 140ac4a5a05cd3df8834e23b22fa74e16d91f1eb Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Tue, 7 Jun 2022 22:36:19 +0800 Subject: [PATCH 08/15] Update JAVA.md --- JAVA.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/JAVA.md b/JAVA.md index 0409131..46cf8cb 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1162,6 +1162,12 @@ for(Integer i:list){ 角度:数据结构+扩容情况+put查找的详细过程+哈希函数+容量为什么始终都是2^N,JDK1.7与1.8的区别。 参考:https://www.jianshu.com/p/9fe4cb316c05 + +看似简单的hashCode和equals面试题,竟然有这么多坑! :https://zhuanlan.zhihu.com/p/58337357 + +最通俗易懂搞定HashMap的底层原理:https://zhuanlan.zhihu.com/p/79507868 + + **数据结构:** From 78def5cf3a9177376ba30cd2cc7f7c759fc2a4a8 Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Tue, 7 Jun 2022 22:45:50 +0800 Subject: [PATCH 09/15] Update JAVA.md --- JAVA.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/JAVA.md b/JAVA.md index 46cf8cb..625dbce 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1167,11 +1167,43 @@ for(Integer i:list){ 最通俗易懂搞定HashMap的底层原理:https://zhuanlan.zhihu.com/p/79507868 +Java hashCode() 和 equals()的若干问题解答:https://www.cnblogs.com/skywang12345/p/3324958.html + +HashMap 1.7和1.8的区别 --答到面试官怀疑人生:https://blog.csdn.net/weixin_44141495/article/details/108402128 + +**HashMap中的put方法** +```JAVA +public V put(K key, V value) { + if (key == null) + return putForNullKey(value); + int hash = hash(key.hashCode()); + int i = indexFor(hash, table.length); + for (Entry e = table[i]; e != null; e = e.next) { + Object k; + if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { + V oldValue = e.value; + e.value = value; + e.recordAccess(this); + return oldValue; + } + } + + modCount++; + addEntry(hash, key, value, i); + return null; + } +``` +​ 会先调用hashCode方法得到该元素的hashCode值 + +​ 然后查看table中是否存在该hashCode值,如果存在则调用equals方法重新确定是否存在该元素,如果存在,则更新value值,否则将新的元素添加到HashMap中 + +**从这里可以看出,hashCode方法的存在是为了减少equals方法的调用次数,从而提高程序效率。** **数据结构:** ​ HashMap在底层数据结构上采用了数组+链表+红黑树,通过散列映射来存储键值对数据 +![HashMap的数据结构为 数组+(链表或红黑树)](https://pic3.zhimg.com/v2-894d2f03f6672c9b6a1ced07fe27e1be_r.jpg) **扩容情况:** From 75746d72aa9acaf9b8cbe3302e78b5f27c55abe5 Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Tue, 7 Jun 2022 22:47:41 +0800 Subject: [PATCH 10/15] Update JAVA.md --- JAVA.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/JAVA.md b/JAVA.md index 625dbce..898da97 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1194,15 +1194,16 @@ public V put(K key, V value) { return null; } ``` -​ 会先调用hashCode方法得到该元素的hashCode值 +​ 1、会先调用hashCode方法得到该元素的hashCode值 -​ 然后查看table中是否存在该hashCode值,如果存在则调用equals方法重新确定是否存在该元素,如果存在,则更新value值,否则将新的元素添加到HashMap中 +​ 2、然后查看table中是否存在该hashCode值,如果存在则调用equals方法重新确定是否存在该元素,如果存在,则更新value值,否则将新的元素添加到HashMap中 **从这里可以看出,hashCode方法的存在是为了减少equals方法的调用次数,从而提高程序效率。** **数据结构:** ​ HashMap在底层数据结构上采用了数组+链表+红黑树,通过散列映射来存储键值对数据 + ![HashMap的数据结构为 数组+(链表或红黑树)](https://pic3.zhimg.com/v2-894d2f03f6672c9b6a1ced07fe27e1be_r.jpg) **扩容情况:** From f675d69319cf364df875bc230caf27ba3c40e3d7 Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Wed, 8 Jun 2022 23:22:02 +0800 Subject: [PATCH 11/15] Update JAVA.md --- JAVA.md | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/JAVA.md b/JAVA.md index 898da97..9ef0f14 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1140,6 +1140,103 @@ for(Integer i:list){ if(i==3) list.remove(i); } ``` + +```java +package collection; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * https://juejin.cn/post/6879291161274482695 + * https://zhuanlan.zhihu.com/p/37476508 + * + * 【强制】不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator + * 方式,如果并发操作,需要对 Iterator 对象加锁。 + * + * + * 反例:test1()没有异常,test2抛出java.util.ConcurrentModificationException + * 解释: + * (1)迭代器类里有这俩变量: + * int cursor; // index of next element to return :下一个要返回的变量的下标 + * int lastRet = -1; // index of last element returned; -1 if no such :上一个返回过的变量的下标 + * + * (2)调用list.remove的时候,--size了; + * -- 即test1() remove("1")后,size变为1,而cursor也等于1,hasNext判断为false就已经退出循环了 + * -- 即test2() remove("2")后,size变为1,而cursor等于2,hasNext判断为true就已经退出循环了 + * + * (3)hasNext:只有在下一个变量的下标不等于size的时候,集合还有下一个元素 + * public boolean hasNext() { + * return cursor != size; + * } + * + */ +public class FailFast { + public static void main(String[] args) { + test(); + System.out.println("test finish, test1 start.."); + test1(); + System.out.println("test1 finish, test2 start.."); + test2(); // 37行 + } + + /** + * 正例: + */ + static void test() { + List list = new ArrayList<>(); + list.add("1"); + list.add("2"); + + Iterator iterator = list.iterator(); + while (iterator.hasNext()) { + String item = iterator.next(); + if ("2".equals(item)) { + iterator.remove(); + } + } + } + + /** + * 反例1 + */ + static void test1() { + List list = new ArrayList<>(); + list.add("1"); + list.add("2"); + + for (String item : list) { + System.out.println("item=" + item); // 未遍历到2,就已经退出循环了 + if ("1".equals(item)) { + list.remove(item); + } + } + } + + /** + * 反例2 + */ + static void test2() { + List list = new ArrayList<>(); + list.add("1"); + list.add("2"); + + /** + Exception in thread "main" java.util.ConcurrentModificationException + at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:911) + at java.util.ArrayList$Itr.next(ArrayList.java:861) + at collection.FailFast.test2(FailFast.java:88) + at collection.FailFast.main(FailFast.java:37) + */ + for (String item : list) { // 88行:也是先调用迭代器 iterator.hasNext() 判断,再调用iterator.next()取下一个原始 + if ("2".equals(item)) { + list.remove(item); + } + } + } +} +``` **fail—fast:**快速失败 From abd5e4bfdb8a761d9acf97b86178171529addb18 Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Wed, 8 Jun 2022 23:22:51 +0800 Subject: [PATCH 12/15] Update JAVA.md --- JAVA.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/JAVA.md b/JAVA.md index 9ef0f14..418465a 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1229,7 +1229,7 @@ public class FailFast { at collection.FailFast.test2(FailFast.java:88) at collection.FailFast.main(FailFast.java:37) */ - for (String item : list) { // 88行:也是先调用迭代器 iterator.hasNext() 判断,再调用iterator.next()取下一个原始 + for (String item : list) { // 88行:也是先调用迭代器 iterator.hasNext() 判断,再调用iterator.next()取下一个元素 if ("2".equals(item)) { list.remove(item); } From 8dda8c33f1c189846d3e43886c5fbb49d65e854f Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Mon, 13 Jun 2022 13:02:37 +0800 Subject: [PATCH 13/15] Update JAVA.md --- JAVA.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/JAVA.md b/JAVA.md index 418465a..a3b9f65 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1075,13 +1075,17 @@ Java集合框架

参考:https://www.runoob.com/java/java-collections.html
集合框架是一个用来代表和操纵集合的统一架构。 +![集合框架体系如图所示](https://cdn.nlark.com/yuque/0/2022/png/375412/1655096358537-65250ce6-2a48-41e9-a2ce-473ff550f60b.png) + **所有的集合框架都包含如下内容:**: ​ 1.接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象 ​ 2.实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。 -​ 3.算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。 +​ 3.算法Collections:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。点赖个较口 + (3.1)Comparable + (3.2)Comparator #### **1、ArrayList和LinkedList** From 88b0c10f5c0a5e068a6b95668ee6dfede1e8300f Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Mon, 13 Jun 2022 13:05:12 +0800 Subject: [PATCH 14/15] Update JAVA.md --- JAVA.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/JAVA.md b/JAVA.md index a3b9f65..dd72320 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1083,9 +1083,7 @@ Java集合框架
​ 2.实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。 -​ 3.算法Collections:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。点赖个较口 - (3.1)Comparable - (3.2)Comparator +​ 3.算法Collections:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。依赖两个比较接口 (3.1)Comparable(3.2)Comparator #### **1、ArrayList和LinkedList** From 34bee702e081cbfc47ccaa92873945ab4e74e650 Mon Sep 17 00:00:00 2001 From: wxdlut <40487546+wxdlut@users.noreply.github.com> Date: Mon, 13 Jun 2022 16:21:30 +0800 Subject: [PATCH 15/15] Update JAVA.md --- JAVA.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/JAVA.md b/JAVA.md index dd72320..c6c9534 100644 --- a/JAVA.md +++ b/JAVA.md @@ -1084,6 +1084,12 @@ Java集合框架
​ 2.实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。 ​ 3.算法Collections:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。依赖两个比较接口 (3.1)Comparable(3.2)Comparator + + +### **0、Comparable和Comparator** +​ Comparable相当于“内部比较器”(耦合),而Comparator相当于“外部比较器”(解耦)。 +参考:https://zhuanlan.zhihu.com/p/101583223 + #### **1、ArrayList和LinkedList**