JAVA 集合类
菜鸟有一次去面试,灰头土脸的就回来了,咖啡兔🐰问他什么问题没回答上来,菜鸟说是JAVA基础的知识:
菜鸟说他从来都没有注意过这些基础问题,所以才败给了最基础的东西。
1. Enumeration接口和Iterator接口的区别有哪些?
2. 你对JAVA集合框架有什么了解?
3. HashMap的扩容为什么都是扩大2倍?
。。。。。。。。。
那咖啡兔🐰就再给菜鸟讲一次基础吧!!
什么是 "集合"
集合: 一组可变数量的数据项(也可能是0个)的组合,这些数据项可能共享某些特征,需要以某种操作方式一起进行操作。这堆数据的类型是相同的,或者是说积累是相同的(可支持继承)。但是列表(数组)一般不被认为是集合,列表的大小是固定的,但是在实现中作为某些形式的集合来使用。
集合框架: 为了表示和集合进行操作的统一定义标准的结构体系。
集合框架包含的三大部分:
- 对外接口。 接口: 代表集合的抽象数据结构类型。不用去在意具体的方法实现,实现“多态”的设计原则。
- 接口的实现 。 实现: 接口的具体实现方法,基于代码重用性很高的数据结构来实现。
- 集合运算法则。算法: 如何去实现计算方法,例如排序,查询等,降低程序的复用性。
JAVA 集合框架:
一般JAVA集合框架包含了两类: 1. 集合(Collection): 集合一般是存储一个元素的集合。 2. 图(Map): 存放键/值对的映射关系。每个键只能映射一个值,Map中不能包含相同的键。
集合框架的设计:
- 高性能: 基本集合动态数组,链表,树,哈希表等结构的实现必须是基于高效原则。
- 不同类型:允许不同类型的集合,复用性高,具有高度的互操作性。
- 扩展性: 集合框架的扩展性与其适用型必须简单。可以简单的修改就满足不同的需求场景。
使用集合框架的好处:
- 可变容量: 集合的容量是自增的。
- 允许API之间的互相操作,API之间互相传递集合。
- 可以扩展以及修改,提高复用性和操作性。
- 可以shiyongJDK自带的集合类,降低维护和学习成本。
- 高性能的数据结构以及算法,提高编码质量。
集合和数组的区别在于:
| 数组 | 集合 | |
|---|---|---|
| 长度 | 固定 | 可变长度 |
| 数据类型 | 基本数据类型 ,引用数据类型 | 引用数据类型 |
| 元素 | 同一种类型数据 | 不同数据类型 |
常用的集合类!!!!
**Map接口 和 collection接口 是所有集合框架的父接口: **
- Collection接口下的子接口: Set接口 以及 List接口
- Map 接口实现类: HashMap , TreeMap , Hashtable , concurrentHashMap 以及 Properties 等
- Set 接口的实现类: HashSet , TreeSet , LinkedHashSet等。
- List 接口实现类: ArrayList , LinkedList,Stack以及Vector等
Collection 接口
Collection 接口体系如下图所示:
Collection 接口介绍:
Collection 接口有 3 种子类型集合: List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、ArrayBlockingQueue等,下面是Collection的所有方法。
常用方法:
int size(): 返回当前集合中的元素数量。boolean isEmpty(): 如果此 collection 不包含元素,则返回 true。 校验当前集合是否存在元素。boolean contains(Object o): 如果此 collection 包含指定的元素,则返回 true 。⭐️⭐️⭐️Iterator<E> iterator(): 返回集合对应的迭代器(这是由于Connection继承了Iterable接口)Object[] toArray(): 将Connection的元素用数组的形式返回。⭐️⭐️⭐️<T> T[] toArray(T[] a): 将集合转化为数组,并保持输入的类型boolean add(Object obj): 添加指定对象,并确保此 collection 包含指定的元素(可选操作)。⭐️⭐️⭐️boolean remove(Object o): 从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)默认移除集合中找到的第一个元素。boolean containsAll(Collection<?> c): 如果此 collection 包含指定 collection 中的所有元素,则返回 true .⭐️⭐️⭐️⭐️boolean addAll(Collection<? extends E> c): 将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。⭐️⭐️⭐️⭐️boolean removeAll(Collection<?> c): 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。⭐️⭐️⭐️⭐️boolean retainAll(Collection<?> c): 仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)
List 接口
List 接口是继承于Collection接口,List集合是一个元素有序(每一个元素都存在对应的顺序索引,初始值为0),可重复的集合。 List 集合通过继承拥有Collection的所有方法以外,还有关于索引的相关方法:。
如下所示 :
void add(int index, E element);:将元素element插入到List集合的index处;boolean addAll(int index, Collection<? extends E> c);:将集合c所有的元素都插入到List集合的index起始处;E remove(int index);:移除并返回index处的元素;int indexOf(Object o);:返回对象o在List集合中第一次出现的位置索引;int lastIndexOf(Object o);:返回对象o在List集合中最后一次出现的位置索引;E set(int index, E element);:将index索引处的元素替换为新的element对象,并返回被替换的旧元素;E get(int index);:返回集合index索引处的对象;List<E> subList(int fromIndex, int toIndex);:返回从索引fromIndex(包含)到索引toIndex(不包含)所有元素组成的子集合;void sort(Comparator<? super E> c):根据Comparator参数对List集合元素进行排序;void replaceAll(UnaryOperator<E> operator):根据operator指定的计算规则重新设置集合的所有元素。ListIterator<E> listIterator();:返回一个ListIterator对象,该接口继承了Iterator接口,在Iterator接口基础上增加了以下方法,具有向前迭代功能且可以增加元素:bookean hasPrevious():返回迭代器关联的集合是否还有上一个元素;E previous();:返回迭代器上一个元素;void add(E e);:在指定位置插入元素;
未完待续!!! 不定期更新咖啡兔基础回顾系列,还请多多指教!!