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关键字来修饰该方法即可。

原文地址:https://www.cnblogs.com/sxjblogs/p/7267346.html