JAVA常用集合的深入学习(待解答Q个数:3)

IDEA查看类图的方法

  1. 首先在方法中打出我们需要的类名,比如Collection,然后,在类名上右键,diagrams->show diagram`

然后就能进入类图的页面,如下图所示。

  1. 进入类图界面后,点击空格,可以弹出弹框,在弹框中搜索对应类名,即可得出搜索的类名同当前类图之前是否存在关系,然后在对应类名上右键jump to source快捷键是F4,即可进入源码

常用集合的框架

了解了如何查看类图后,在学习常用集合的底层逻辑之前,我们首先需要掌握其继承实现的脉络,这里只记常用的类的实现

Tips:

  1. 带有Linked的都是其去掉Linked单词后的子类或者实现类,比如LinkedListList的实现类,LinkedHashSetHashSet的子类,LinkedHashMapHashMap的子类
  2. List集合下主要有三个实现类;Set下也有三个主要实现类,其中LinkedHashSet除了是Set的实现类之外,还是HashSet的子类;Map下有四个主要实现类,外加一个HashTable的子类Properties,其中LinkedHashMap是除了是Map的实现类外,还是HashMap的子类
  3. 另外还发现Map下命名似乎同Set下实现类命名有相似之处,都有一个Hash+Tree+,为何List没有,是否同他们的底层使用的数据结构有关?由于学习还不深入,暂时留下此疑问,待后续解答Q1
  4. 另外查看源码发现,HashSetArrayList等具体方法似乎都extends了一些以Abstract开头的抽象类,而这些以Abstract开头的抽象类似乎都extendsAbstractCollection ,AbstractCollectionimplementsCollection接口,(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:

  1. 通过代码测试发现,addaddAll其实都可以添加一个集合,不过两者的区别是,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:

  1. 需要扒拉一下源码看看为啥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

  1. 需要注意调用方法前需要先判断集合不为null,如果为null会抛出空指针异常,如下图:

7.remove(Object):移除集合中某个元素

8.removeAll(Collection<?>):移除一个集合中与参数集合相同的所有元素

9.size():获取集合中元素个数


未完待续

posted @ 2022-02-10 23:02  resetStudy  阅读(45)  评论(0)    收藏  举报