集合/容器
容器--数组
数组特点:
一组数据类型相同的元素集合
创建数组时,必须给定长度,而且一旦创建长度后就不能变
一旦数组装满元素,需要创建一个新的数组,将元素复制过去
缺点:
不方便:判断是否装满了,如果装满了,数组复制
如果我们从数组中间删除一个元素或者添加一个元素,需要移动后面的元素。
java中为了解决数据单一的情况,java就提供了许多不同结构的集合类,让我们可以根据不同的场景进行数据存储选择。
提供了数据实现的集合,链表实现的集合,哈希结构,树结构......
让java程序员使用起来就非常方便。
集合
单列集合:一次就放进去一个值(对象)
Collection接口,定义了单列集合共有的方法
List:可以有重复元素
ArrayList 数组列表
底层有一个数组,可以动态扩展数组长度,并提供一个一系列方法操作。
查询 快;中间增加、删除 慢
LinkedList 链表列表
底层是一个链表结构
查询 慢;增加、删除 快
Vector 数组列表 线程安全的
Set:不可以有重复元素
HashSet
元素是无序的 通过hashcode和equals方法判断元素是否重复
TreeSet
可以排序 实现Comparable接口,重写comparableTo()判断大小以及是否重复
双列集合:键 值
Map接口,数据存储是"键:值"的形式存储键不能重复的,值可以重复通过键可以找到值一个键只能映射到一个值
HashMap
键是无序的HashMap可以存储一个为null键,多个为null的值
HashMap底层原理:
TreeMap
键可以排序键元素类型必须实现Comparable接口,重写comparableTo()
Hashtable
底层实现也是用到key的哈希值,计算位置判断元素是否重复方法上都添加了synchronized锁Hashtable中不能存储为null的键和为null的值
结构图: