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