首页 > 代码库 > 二、关于集合
二、关于集合
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是一个工具类,所有方法都是静态方法,所有的集合类都共享这些功能。
各种集合的使用场合
总结图
二、关于集合