首页 > 代码库 > 二、关于集合

二、关于集合

1.数组和集合的区别:

    数组:只能存储同一种数据类型的集合容器,长度固定,在内存中元素的地址空间是连续存放的,缺少相应的操作方法。

    集合:用于存储对象、数据类型不一的容器,长度可变,内存地址空间不一定是连续的,具有相应的操作方法(CRUD)。

 

 

2.集合体系图

技术分享

 

技术分享

 

 Collection接口下有两个子接口:List(列表) Set(集)

特点

  Collection中描述的是集合共有的功能(CRUD)

  List的数据存储特点:可重复,有序

  Set的特点:不重复,无序

 

List接口:

有序:

存入和取出的数据的顺序一致,元素有先后顺序。元素可以重复。

实现类

ArrayList :数组结构, 线程不安全,查询速度快。(由于ArrayList是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素,所以慢。数组是可以直接按索引查找, 所以查找时较快。)

LinkedList :链表结构,增删速度快。(由于底层是链表,增删快,查找慢)

Vector :数组结构,线程安全,但速度慢,已被ArrayList替代。

特点: 可以通过索引来操作元素,凡是能用索引操作的都是List特有方法

 

Set接口:

无序:

存入和取出的顺序不一定相同,值不能重复。一个不包含重复元素的 Collection。

实现类

HashSet:线程不安全,存取速度快。底层是以hash表实现的。

TreeSet: 线程不安全,可以对Set集合中的元素进行排序。

 

 

Map接口,称为双列集合,Collection为单列集合

interface Map<K,V>

K - 此映射所维护的键的类型

V - 映射值的类型

一个映射不能包含重复的键;每个键最多只能映射到一个值。

实现类

HashMap:基于哈希表的 Map 接口的实现。允许使用 null 的键和值。要保证键的唯一性,需要覆盖hashCode方法和equals方法。线程不安全,除了允许使用 null 之外,HashMap 类与 Hashtable 大致相同。

TreeMap:底层采用二叉树数据结构 根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法

Hashtable 此类实现一个哈希表,该哈希表将键映射到相应的值。不可以存入null键和null值。线程安全,效率低,被HashMap替代。

 

Collection和Collections的区别:

  Collection是集合的接口

  Collections是一个工具类,所有方法都是静态方法,所有的集合类都共享这些功能。

  

 

 

各种集合的使用场合

技术分享

 

 

总结图

技术分享

 

二、关于集合