集合与数组的区别
长度区别:数组是固定的 集合是可变的
内容的区别:数组可以是基本类型,也可以是引用类型 但是集合只能是引用类型
元素内容: 数组只能存储同一种类型 集合可以存储不同类型(但一般的时候也是存储同一类型)
Collection集合的方法:
boolean add(E e)在集合的末尾添加元素
boolean remove(Object o若本类集中有值与o的值相等的元素,则删除该元素,并返回true
void clear 清除本类集中所有元素,调用完该方法后本类集将为空。
boolean contains(Ob iect o)判断集合中是否包含某元素
boolean isEmpty()判断集合是否为空
int size() 返回集合中的元素个数
boolean addA11(Collection c) 将一个类集c中的所有元素添加到另一个类集
Object[] toArray()返回一个包含了本类集中所有元素的数组,数组类型为: object[]
Iterator iterator() 迭代器,集合的专用遍历方式
Collection接口的接口 对象的集合(单列集合)
List 接口:元素按进入先后有序保存,可重复 实现类有 LinkedList ArrayList Vector Stack 是Vector类的实现类
LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
优点:ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)
优点:ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)
LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
优点:LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,对于新增和删除操作add和remove,LinedList比较占优势。LinkedList 适用于要头尾操作或插入指定位置的场景
缺点:因为LinkedList要移动指针,所以查询操作性能比较低。
List和Set的区别
2.List:
(1)ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素
(2)LinkedList 底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素
(3)Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素
Set集合
特点:
1. 特点:无序,不重复
2. 遍历:foreach,迭代器
3. 扩容: 初始容量16,负载因子0.75,扩容增量1倍
实现类
HashSet
特点:
1.它存储唯一元素并允许空值,依据对象的hashcode来确定该元素是否存在
2. 由HashMap支持
3. 不保持插入顺序
4. 非线程安全
5. 性能参数:初始容量,负载因子,默认值: 初始容量16,负载因子0.75,示例:new HashSet<>(20, 0.5f);
TreeSet
1. 是一个包含有序的且没有重复元素的集合
2. 作用是提供有序的Set集合,自然排序或者根据提供的Comparator进行排序
3. TreeSet是基于TreeMap实现的
Map接口的介绍
特点:
键值对(key,value),键不能重复,值可以重复,每个键可以映射到最多一个值;
键重复则覆盖,没有继承Collection接口;
可以不同键指向同一Value;
支持用户自由绑定Key值与Value;
可以直接访问Key值获得对应Value
扩容:
初始容量16,负载因子0.75,扩容增量1倍
基本方法(注:实现类都可以使用这些方法!)
1、containsKey(key):在map中是否有key存在,存在返回true,反之返回false
2、putIfAbsent(key, value):先判断指定的键(key)是否存在,不存在则将键/值对插入
3、遍历:forEach((key, value)
4、放入:put(key, value)
5、通过Key取得value:get(key)
6、获取迭代器的方法:
keySet()
entrySet()
Map实现类介绍
HashMap
基本介绍
线程不安全,最常用,速度快,无序(HashMap的无序是指不会记录插入的顺序,也不会根据特定规则进行排序; 但是HashMap存值的时候会根据key的hashCode()来计算存储的位置(位置是散列的,所以说其无序),删除时是删除元素)
内部采用数组来存放数据
HashMap是查询效率最高的数据结构
Map实现类介绍
HashMap
基本介绍
线程不安全,最常用,速度快,无序(HashMap的无序是指不会记录插入的顺序,也不会根据特定规则进行排序; 但是HashMap存值的时候会根据key的hashCode()来计算存储的位置(位置是散列的,所以说其无序),删除时是删除元素)
内部采用数组来存放数据
HashMap是查询效率最高的数据结构
TreeMap
- key值按一定的顺序排序,基于红黑树,容量无限制,非线程安全,比较常用
- 添加或获取元素时性能较HashMap慢(因为需求维护内部的红黑树,用于保证key值的顺序)
- 能比较元素的大小,根据key比较(元素的自然顺序,集合中自定义的比较器也可排序)TreeMap
- key值按一定的顺序排序,基于红黑树,容量无限制,非线程安全,比较常用
- 添加或获取元素时性能较HashMap慢(因为需求维护内部的红黑树,用于保证key值的顺序)
- 能比较元素的大小,根据key比较(元素的自然顺序,集合中自定义的比较器也可排序)