Java基础19-一文搞懂Java集合类框架,以及常见面试题(一)

简介: Java基础19-一文搞懂Java集合类框架,以及常见面试题(一)

在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影! image.png

java中集合大家族的成员实在是太丰富了,有常用的ArrayList、HashMap、HashSet,也有不常用的Stack、Queue,有线程安全的Vector、HashTable,也有线程不安全的LinkedList、TreeMap等等!

image.png

上面的图展示了整个集合大家族的成员以及他们之间的关系。下面就上面的各个接口、基类做一些简单的介绍(主要介绍各个集合的特点。区别)。

下面几张图更清晰地介绍了结合类接口间的关系:

image.png

map的实现类

image.png

Collection接口

Collection接口是最基本的集合接口,它不提供直接的实现,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。Collection所代表的是一种规则,它所包含的元素都必须遵循一条或者多条规则。如有些允许重复而有些则不能重复、有些必须要按照顺序插入而有些则是散列,有些支持排序但是有些则不支持。

在Java中所有实现了Collection接口的类都必须提供两套标准的构造函数,一个是无参,用于创建一个空的Collection,一个是带有Collection参数的有参构造函数,用于创建一个新的Collection,这个新的Collection与传入进来的Collection具备相同的元素。//要求实现基本的增删改查方法,并且需要能够转换为数组类型

    public class Collection接口 {
        class collect implements Collection {复制代码
            @Override
            public int size() {
                return 0;
            }复制代码
            @Override
            public boolean isEmpty() {
                return false;
            }复制代码
            @Override
            public boolean contains(Object o) {
                return false;
            }复制代码
            @Override
            public Iterator iterator() {
                return null;
            }复制代码
            @Override
            public Object[] toArray() {
                return new Object[0];
            }复制代码
            @Override
            public boolean add(Object o) {
                return false;
            }复制代码
            @Override
            public boolean remove(Object o) {
                return false;
            }复制代码
            @Override
            public boolean addAll(Collection c) {
                return false;
            }复制代码
            @Override
            public void clear() {复制代码
            }
    //省略部分代码  复制代码
            @Override
            public Object[] toArray(Object[] a) {
                return new Object[0];
            }
        }
    }复制代码

List接口

List接口为Collection直接接口。List所代表的是有序的Collection,即它用某种特定的插入顺序来维护元素顺序。用户可以对列表中每个元素的插入位置进行精确地控制,同时可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。实现List接口的集合主要有:ArrayList、LinkedList、Vector、Stack。

2.1、ArrayList

    public class List接口 {
        //下面是List的继承关系,由于List接口规定了包括诸如索引查询,迭代器的实现,所以实现List接口的类都会有这些方法。
        //所以不管是ArrayList和LinkedList底层都可以使用数组操作,但一般不提供这样外部调用方法。
        //    public interface Iterable<T>
    //    public interface Collection<E> extends Iterable<E>
    //    public interface List<E> extends Collection<E>
        class MyList implements List {复制代码
            @Override
            public int size() {
                return 0;
            }复制代码
            @Override
            public boolean isEmpty() {
                return false;
            }复制代码
            @Override
            public boolean contains(Object o) {
                return false;
            }复制代码
            @Override
            public Iterator iterator() {
                return null;
            }复制代码
            @Override
            public Object[] toArray() {
                return new Object[0];
            }复制代码
            @Override
            public boolean add(Object o) {
                return false;
            }复制代码
            @Override
            public boolean remove(Object o) {
                return false;
            }复制代码
            @Override
            public void clear() {复制代码
            }复制代码
           //省略部分代码复制代码
            @Override
            public Object get(int index) {
                return null;
            }复制代码
            @Override
            public ListIterator listIterator() {
                return null;
            }复制代码
            @Override
            public ListIterator listIterator(int index) {
                return null;
            }复制代码
            @Override
            public ListIterator listIterator(int index) {
                return null;
            }复制代码
            @Override
            public Object[] toArray(Object[] a) {
                return new Object[0];
            }
        }
    }复制代码

Set接口

Set是一种不包括重复元素的Collection。它维持它自己的内部排序,所以随机访问没有任何意义。与List一样,它同样运行null的存在但是仅有一个。由于Set接口的特殊性,所有传入Set集合中的元素都必须不同,同时要注意任何可变对象,如果在对集合中元素进行操作时,导致e1.equals(e2)==true,则必定会产生某些问题。实现了Set接口的集合有:EnumSet、HashSet、TreeSet。

3.1、EnumSet

是枚举的专用Set。所有的元素都是枚举类型。

3.2、HashSet

HashSet堪称查询速度最快的集合,因为其内部是以HashCode来实现的。它内部元素的顺序是由哈希码来决定的,所以它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。

    public class Set接口 {
        // Set接口规定将set看成一个集合,并且使用和数组类似的增删改查方式,同时提供iterator迭代器
        //    public interface Set<E> extends Collection<E>
        //    public interface Collection<E> extends Iterable<E>
        //    public interface Iterable<T>
        class MySet implements Set {复制代码
            @Override
            public int size() {
                return 0;
            }复制代码
            @Override
            public boolean isEmpty() {
                return false;
            }复制代码
            @Override
            public boolean contains(Object o) {
                return false;
            }复制代码
            @Override
            public Iterator iterator() {
                return null;
            }复制代码
            @Override
            public Object[] toArray() {
                return new Object[0];
            }复制代码
            @Override
            public boolean add(Object o) {
                return false;
            }复制代码
            @Override
            public boolean remove(Object o) {
                return false;
            }复制代码
            @Override
            public boolean addAll(Collection c) {
                return false;
            }复制代码
            @Override
            public void clear() {复制代码
            }复制代码
            @Override
            public boolean removeAll(Collection c) {
                return false;
            }复制代码
            @Override
            public boolean retainAll(Collection c) {
                return false;
            }复制代码
            @Override
            public boolean containsAll(Collection c) {
                return false;
            }复制代码
            @Override
            public Object[] toArray(Object[] a) {
                return new Object[0];
            }
        }
    }复制代码


Java基础19-一文搞懂Java集合类框架,以及常见面试题(二):https://developer.aliyun.com/article/1535725

目录
相关文章
|
6月前
|
安全 Java 数据建模
Java记录类:简化数据载体的新选择
Java记录类:简化数据载体的新选择
341 101
|
5月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
5月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
216 4
|
5月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
283 5
|
5月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
366 8
|
5月前
|
存储 安全 Java
《数据之美》:Java集合框架全景解析
Java集合框架是数据管理的核心工具,涵盖List、Set、Map等体系,提供丰富接口与实现类,支持高效的数据操作与算法处理。
|
5月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
158 7
|
5月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
365 5
|
5月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
270 1
|
5月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
386 1