JAVA 基础回顾(集合类)

666 阅读5分钟

JAVA 集合类

菜鸟有一次去面试,灰头土脸的就回来了,咖啡兔🐰问他什么问题没回答上来,菜鸟说是JAVA基础的知识:
1. Enumeration接口和Iterator接口的区别有哪些?
2. 你对JAVA集合框架有什么了解?
3. HashMap的扩容为什么都是扩大2倍?
。。。。。。。。。

菜鸟说他从来都没有注意过这些基础问题,所以才败给了最基础的东西。
那咖啡兔🐰就再给菜鸟讲一次基础吧!!

什么是 "集合"

集合: 一组可变数量的数据项(也可能是0个)的组合,这些数据项可能共享某些特征,需要以某种操作方式一起进行操作。这堆数据的类型是相同的,或者是说积累是相同的(可支持继承)。但是列表(数组)一般不被认为是集合,列表的大小是固定的,但是在实现中作为某些形式的集合来使用。

集合框架: 为了表示和集合进行操作的统一定义标准的结构体系。

集合框架包含的三大部分:

  1. 对外接口。 接口: 代表集合的抽象数据结构类型。不用去在意具体的方法实现,实现“多态”的设计原则。
  2. 接口的实现 。 实现: 接口的具体实现方法,基于代码重用性很高的数据结构来实现。
  3. 集合运算法则。算法: 如何去实现计算方法,例如排序,查询等,降低程序的复用性。

JAVA 集合框架:

一般JAVA集合框架包含了两类: 1. 集合(Collection): 集合一般是存储一个元素的集合。 2. 图(Map): 存放键/值对的映射关系。每个键只能映射一个值,Map中不能包含相同的键。

集合框架的设计:

  • 高性能: 基本集合动态数组,链表,树,哈希表等结构的实现必须是基于高效原则。
  • 不同类型:允许不同类型的集合,复用性高,具有高度的互操作性。
  • 扩展性: 集合框架的扩展性与其适用型必须简单。可以简单的修改就满足不同的需求场景。

使用集合框架的好处:

  1. 可变容量: 集合的容量是自增的。
  2. 允许API之间的互相操作,API之间互相传递集合。
  3. 可以扩展以及修改,提高复用性和操作性。
  4. 可以shiyongJDK自带的集合类,降低维护和学习成本。
  5. 高性能的数据结构以及算法,提高编码质量。

集合和数组的区别在于:

数组集合
长度固定可变长度
数据类型基本数据类型 ,引用数据类型引用数据类型
元素同一种类型数据不同数据类型

常用的集合类!!!!

**Map接口 和 collection接口 是所有集合框架的父接口: **

  1. Collection接口下的子接口: Set接口 以及 List接口
  2. Map 接口实现类: HashMap , TreeMap , Hashtable , concurrentHashMap 以及 Properties 等
  3. Set 接口的实现类: HashSet , TreeSet , LinkedHashSet等。
  4. List 接口实现类: ArrayList , LinkedList,Stack以及Vector等

Collection 接口

Collection 接口体系如下图所示:


Collection 接口介绍:

Collection 接口有 3 种子类型集合: ListSetQueue,再下面是一些抽象类,最后是具体实现类,常用的有 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);:在指定位置插入元素;

未完待续!!! 不定期更新咖啡兔基础回顾系列,还请多多指教!!