Java中的集合
前言:
在开发应用程序时,如果想存储多个不同类型的数据,可以使用数组来实现,但是使用数组存在很多缺陷,比如:
1.数组的长度固定不变,不能很好的适应元素数量动态变化的情况。
2.可通过数组名.length获取数组的长度,却无法直接获取数组中实际存储的元素的个数。
3.数组采用在内存中分配连续的空间的存储方式存储,根据元素的信息查找时效率比较低,需要多次比较。
针对数组的缺陷,Java提出了比数组更为灵活,更使用的集合框架,可以大大提高软件的开发效率。
一.什么是集合
如下图所示,集合中有List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口
1.1ArrayList介绍
也称Array List为动态数组
优点: 底层数据结数组,查询快,增删慢。
缺点: 线程不安全,效率高
常用方法:
方法 | 说明 |
---|---|
boolean add(Object o) | 在列表的末尾加元素,起始索引位置从0开始 |
void add(int index,Object o) | 在指定的索引位置加上元素O,索引位置必须介于0和列表中元素个数之间 |
int size() | 返回列表中元素的个数 |
Object get(int index) | 返回指定位置的值,需要转换类型 |
void set(int index,Object obj) | 将索引位置的元素替换为object元素 |
boolean contains(Object o) | 判断列表中是否包含指定元素O |
int indexOf(Object o) | 返回元素在集合中出现的索引位置 |
boolean remove(Object o) | 从元素中删除元素o |
object remove(int index) | 从列表中删除指定位置的元素,起始索引位置从0开始 |
2.LinkedList介绍
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
常用方法:
方法 | 说明 |
---|---|
void addFirst(Obj obj) | 将指定元素插入到当前集合的首部 |
void addLast(Object) | 将指定元素插入到当前集合的尾部 |
Object getFirst() | 获得当前集合的第一个元素 |
Object getLast() | 获得当前元素的最后一个元素 |
Object removeFirst() | 移除并返回当前集合的第一个元素 |
Object removeLast() | 移除并返回当前集合的最后一个元素 |
3.HashMap介绍
hashMap是键值对集合,键不能重复,最多有一个null,值是可以重复的。当jdk1.8之前,hashMap是数组+链表,jdk1.8之后是数组+链表+红黑树。
HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
值得注意的是HashMap不是线程安全的,如果想要线程安全的HashMap,可以通过Collections类的静态方法synchronizedMap获得线程安全的HashMap。
常用方法
方法 | 说明 |
---|---|
object put (Object key,Object Value) | 将相互关联的一个key与一个value放入该集合,如果Map接口中已经包含了Key对应的Value,则旧值将被替换 |
Object remove(Object key) | 从当前集合中移除与指定key相关的映射,并返回该key关联的旧value如果key没有任何关联,则返回null |
boolean containsKey(Object key) | 判断集合中是否存在key |
boolean containsValue(Object value) | 判断集合中是否存在value |
boolean isEmpty() | 判断集合中是否存在元素 |
void clear() | 清楚集合中所有的元素 |
int size() | 返回集合中元素的数量 |
Set keySet() | 获取所有key的集合 |
Collction values() | 获取所有value的集合 |
深入了解hashMap可以看看这篇文章
https://www.cnblogs.com/xawei/p/6747660.html