常用集合数据结构的特点
一、数组
数组存储数据的特点: 有序、可重复。
缺点:
1、一旦初始化以后,其长度就不可以修改
2、数组中提供的方法十分有限,对于添加,删除,插入数据等操作时非常不便,同时效率不高
3、获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用

二、List集合
特点:
- 1.是一个有序的集合 (存储元素和取出元素的顺序是一致的)
- 2.有索引 包含了一些带索引的方法 (索引从0开始)
- 3.允许存储重复元素 (可以存储多个null值)
1.Vector
底层结构是数组
线程比较安全 也会出现不安全的情况
同步的
2.ArrayList
底层结构是数组
不是同步的
查询速度快 增删速度慢(底层数据结构决定的)
3.LinkedList
链表实现的
不是同步的
增删速度快 查询速度慢(底层数据结构决定的)
不建议使用多态方式创建对象
-
ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。
-
ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
ArrayList 实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。稍后,我们会比较List的“快速随机访问”和“通过Iterator迭代器访问”的效率。ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。
ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。
和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。
ArrayList 的扩容问题
① 如果 ArrayList 调用不带参数的构造方法,那么顺序表的大小为0,当第一次使用 add( ) 方法的时候,整个顺序表才变为10,当顺序表中的10个数据放满的时候,开始以1.5倍的方式进行扩容。
② 如果 ArrayList 调用带参数的构造方法,那么顺序表的大小就是你输入参数时的容量,当放满的时候,依然以1.5倍的方式进行扩容。
三、Set集合
特点:
- 1.不包含重复元素(只能存一个null值)
- 2.没有带索引的方法 不能使用普通for循环遍历
1.HashSet
无序集合 (存储元素和取出元素的顺序有可能不一致)
底层是一个哈希表结构(查询速度快)
集合元素值可以是null
2.LinkedHashSet
是HashSet的子类
有序集合 (存储元素和取出元素的顺序一致)
底层是一个哈希表结构+链表结构(所以有序)
2.TreeSet
是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态
底层是一个红黑树结构,默认整形排序为从小到大。

浙公网安备 33010602011771号