JAVA常用集合的深入学习(待解答Q个数:3)
IDEA查看类图的方法
- 首先在方法中打出我们需要的类名,比如
Collection,然后,在类名上右键,diagrams->show diagram`
然后就能进入类图的页面,如下图所示。

- 进入类图界面后,点击空格,可以弹出弹框,在弹框中搜索对应类名,即可得出搜索的类名同当前类图之前是否存在关系,然后在对应类名上右键
jump to source快捷键是F4,即可进入源码
![]()
![]()
常用集合的框架
了解了如何查看类图后,在学习常用集合的底层逻辑之前,我们首先需要掌握其继承实现的脉络,这里只记常用的类的实现
Tips:
- 带有
Linked的都是其去掉Linked单词后的子类或者实现类,比如LinkedList是List的实现类,LinkedHashSet是HashSet的子类,LinkedHashMap是HashMap的子类 List集合下主要有三个实现类;Set下也有三个主要实现类,其中LinkedHashSet除了是Set的实现类之外,还是HashSet的子类;Map下有四个主要实现类,外加一个HashTable的子类Properties,其中LinkedHashMap是除了是Map的实现类外,还是HashMap的子类- 另外还发现
Map下命名似乎同Set下实现类命名有相似之处,都有一个Hash+和Tree+,为何List没有,是否同他们的底层使用的数据结构有关?由于学习还不深入,暂时留下此疑问,待后续解答Q1 - 另外查看源码发现,
HashSet,ArrayList等具体方法似乎都extends了一些以Abstract开头的抽象类,而这些以Abstract开头的抽象类似乎都extends了AbstractCollection,AbstractCollection又implements了Collection接口,(HashMap和TreeMap->AbstractMap······>Map;HashTable>Dictionary抽象类)这是否是某种设计模式的体现?由于对设计模式理解还不深入,暂时留下此疑问,待后续解答Q2
![]()
![]()
Collection通用方法

如上图所示,Collection接口中有十九个方法,这里简单了解常用的九个,以ArrayList为例
Collection没有直接实现子类,是通过他的子类List和Set来实现的,而List是有序的,即添加顺序和获取顺序是一致的;Set是无序的。
1.add(E):添加元素
package com.study.java.collection;
import java.util.ArrayList;
import java.util.Collection;
public class Collection_Test {
public static void main(String[] args) {
Collection coll = new ArrayList();
//1.add(E):添加元素
coll.add("添加元素1");
coll.add("添加元素2");
coll.add("添加元素3");
coll.add("添加元素4");
coll.add("添加元素5");
System.out.println(coll);
}
}

2.addAll(Collection<? extends E>):添加集合对象元素
package com.study.java.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
public class Collection_Test {
public static void main(String[] args) {
Collection coll = new ArrayList();
//2.addAll(Collection<? extends E>):添加集合对象元素
coll.add("添加元素1");
coll.add("添加元素2");
coll.add("添加元素3");
coll.add("添加元素4");
coll.add("添加元素5");
Collection collTemp = new ArrayList();
Collection collTemp1 = new ArrayList();
//add方法也可以添加集合
collTemp.add(coll);
System.out.println("collTemp--add: "+collTemp);
collTemp1.addAll(coll);
System.out.println("collTemp1--addAll: "+collTemp1);
}
}

Tips:
- 通过代码测试发现,
add和addAll其实都可以添加一个集合,不过两者的区别是,add添加的集合是作为一个元素即集合中的集合元素存在的,而addAll添加的则是参数中集合的元素,相当于把参数中集合的元素复制给了调用addAll的集合
---20220220---
3.clear():清空元素
package com.study.java.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
/**
* idea导包快捷键:Ctrl+Alt+O
* 复制当前行的快捷键:Ctrl+D
* 删除行:Ctrl+Y
* System.out.println();语句缩写:sout
*/
public class Collection_Test {
public static void main(String[] args) {
Collection coll = new ArrayList();
//2.addAll(Collection<? extends E>):添加集合对象元素
coll.add("添加元素1");
coll.add("添加元素2");
coll.add("添加元素3");
coll.add("添加元素4");
coll.add("添加元素5");
Collection collTemp = new ArrayList();
Collection collTemp1 = new ArrayList();
//add方法也可以添加集合
collTemp.add(coll);
System.out.println("collTemp--add: "+collTemp);
collTemp1.addAll(coll);
System.out.println("collTemp1--addAll: "+collTemp1);
//清空集合元素
collTemp.clear();
System.out.println("清空后集合"+collTemp);
}
}

4.contains(Object):判断元素是否存在
5.containsAll(Collection<?>):判断一个集合中是否含有另一个集合的所有元素
package com.study.java.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
/**
* idea导包快捷键:Ctrl+Alt+O
* 复制当前行的快捷键:Ctrl+D
* 删除行:Ctrl+Y
* System.out.println();语句缩写:sout
*/
public class Collection_Test {
public static void main(String[] args) {
Collection coll = new ArrayList();
//2.addAll(Collection<? extends E>):添加集合对象元素
coll.add("添加元素1");
coll.add("添加元素2");
coll.add("添加元素3");
coll.add("添加元素4");
coll.add("添加元素5");
Collection collTemp = new ArrayList();
Collection collTemp1 = new ArrayList();
//add方法也可以添加集合
collTemp.add(coll);
System.out.println("collTemp--add: "+collTemp);
collTemp1.addAll(coll);
System.out.println("collTemp1--addAll: "+collTemp1);
//判断一个集合是否有另一个集合的所有元素
System.out.println("containsAll:"+collTemp.containsAll(collTemp1));
System.out.println("contains:"+collTemp.contains(collTemp1));
}
}

Tips:
- 需要扒拉一下源码看看为啥containsAll和contains比较的结果不同?Q
6.isEmpty():判断集合是否为空
package com.study.java.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
/**
* idea导包快捷键:Ctrl+Alt+O
* 复制当前行的快捷键:Ctrl+D
* 删除行:Ctrl+Y
* System.out.println();语句缩写:sout
*/
public class Collection_Test {
public static void main(String[] args) {
Collection coll = new ArrayList();
//2.addAll(Collection<? extends E>):添加集合对象元素
coll.add("添加元素1");
coll.add("添加元素2");
coll.add("添加元素3");
coll.add("添加元素4");
coll.add("添加元素5");
Collection collTemp = new ArrayList();
Collection collTemp1 = new ArrayList();
//add方法也可以添加集合
collTemp.add(coll);
System.out.println("collTemp--add: "+collTemp);
collTemp1.addAll(coll);
System.out.println("collTemp1--addAll: "+collTemp1);
System.out.println("isEmpty:"+collTemp.isEmpty());
}
}

Tips
-
需要注意调用方法前需要先判断集合不为null,如果为null会抛出空指针异常,如下图:
![]()
7.remove(Object):移除集合中某个元素
8.removeAll(Collection<?>):移除一个集合中与参数集合相同的所有元素
9.size():获取集合中元素个数
未完待续






浙公网安备 33010602011771号