zoukankan      html  css  js  c++  java
  • Java面试之集合

    一 概述

    1.什么集合?

    集合是一种用于存储对象的数据结构。

    2.集合与数组对比

    • 数据类型:集合只能用来存储对象(实际是对象的引用),不能用于存储基本数据类型数据,基本数据类型必须转换为相应的包装类,才能存储到集合中。而数组不仅可以储存基本类型数据,还可以存储对象。
    • 长度:集合存储可存储的元素数目是可变的,数组在创建时就指定了长度,可储存元素数目固定。

    二 继承关系

    注:图中所指的线程安全是严格意义上的线程安全,即读写操作同时只能有一个线程执行,并非宽泛的同时只能有一个线程写,而多个线程读。

    三 List

    1.List集合特点

    有序,可重复,元素允许为null。有序意味着默认情况下,在集合中,元素按照插入的顺序排列,可以根据索引操作集合中的元素,比如获取指定索引位置的元素,删除指定索引位置的元素,在指定索引位置插入元素。

    2.底层实现

    ⑴ArrayList与Vector

    底层都是数组,初始长度10,ArrayList扩容后的容量是原容量的1.5倍,Vector是原容量的2倍。Vector底层增删改查方法都采用了同步机制,线程安全,效率低,现在很少使用。

    ⑵LinkedList

    底层采用双向链表,链表上的每一个元素都称为节点,节点由三部分构成:上一个节点的内存地址、自身存储数据的内存地址,下一个节点的内存地址。在LinkedList中元素的索引值,就是元素插入次序减1,第n个插入,索引就是n-1。

    一.介绍Collection 

    1.概念:Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行,于是衍生出两个子类接口List和Set。

    2.通过导图的方式直观了解Collection

    二.介绍Map

    1.概念:map是一个键值对形式的集合。它的元素都是有键和值组成。Map的键(key)是唯一的,值(value)可以重复。

    2.通过导图的方式直观了解Map

    三.上述多次提到关于线程安全和非线程安全,下面做个简单的介绍:

    1.线程安全:

      当多个线程类并发操作某类的某个方法,(在该方法内部)来修改这个类的某个成员变量的值,不会出错,则我们就说,该的这个方法是线程安全的。

      某类的某方法是否线程安全的关键是:

      (1) 该方法是否修改该类的成员变量;

      (2) 是否给该方法加锁(是否用synchronized关键字修饰)。 

    2.线程不安全:

      当多个线程类并发操作某类的某个方法,(在该方法内部)来修改这个类的某个成员变量的值,很容易就会发生错误,故我们就说,这个方法是线程不安全的。如果要把这个方法变成线程安全的,则用 synchronized关键字来修饰该方法即可。

  • 相关阅读:
    彻底理解同步 异步 阻塞 非阻塞
    Vue2+Hbuilder 开发 H5+App 优雅调试
    Vue2+Hbuilderx打包移动端App的常见问题
    题解 loj 6102 斐波那契的最小公倍数
    题解 hdu 4336 Card Collector
    题解 luogu P3715 [HAOI2015]按位或
    python+appium【第二章-adb命令的使用】
    python+appium【第一章-环境搭建】
    python封装上传图片方法执行时有告警【ResourceWarning: Enable tracemalloc to get the object allocation traceback5】
    python需要上传图片或者上传文件的方法【autoit3】
  • 原文地址:https://www.cnblogs.com/sxjblogs/p/7267346.html
Copyright © 2011-2022 走看看