一、集合的出现原因
java中已经有数组了,为什么还要集合呢?其实数组是有短板的,数组一旦创建大小固定不变,存放数据的类型单一 ;为了解决这些问题,集合就出现了,首先集合的长度是可变的,并且可以存储任意引用数据类型数据,集合一般都是接口和类和数组数据不同。
集合和数组的区别:
1.【创建之后】数组的长度是不可变,集合对象的长度可变;
2.集合只能放引用数据类型数据的,创建时没有泛型指定可以同时存放多种数据类型数据;
3.数组【创建之前】可以存放任意数据类型数据,但是创建之后,就只能存放声明的一种数据类型。
二、集合体系结构
【以下是在java 常用的几种集合体系】
三、单列集合
(一)collection接口的介绍
单列集合的顶层接口,定义了单列集合中一些共性的功能,由于不能创建对象,要想使用它就得借助多态创建它的实现类对象,实际开发中常用典型实现类ArrayList来使用。
Collection<E> list = new ArrayList<>();
(二)常用方法
方法名 | 说明 |
boolean add(E e) | 添加元素 |
boolean remove (Object o) | 从集合中移除指定的元素 |
void clear () | 清空集合中所有的元素 |
boolean contains (Object o) | 判断集合中是否包含指定的元素 |
boolean isEmpty () | 判断集合是否为空 |
int size() | 获取集合当前状态的长度值 |
(二)单列集合的遍历
1)迭代器【专门对集合进行遍历的接口 】遍历
获取迭代器的功能:iterator( ):获取iterator类型的迭代器对象
迭代器的功能:
hasNext( ):判断下个位置是否有元素,返回boolean类型的值;
next( ):获取集合位置上的元素,同时移动迭代器指针到下个位置;
remove( ):删除当前元素;
1、使用集合对象获取迭代器对象
2、利用while循环结合迭代器的hasNext和next方法进行遍历即可
具体代码实现:
public static void method1(ArrayList<Integer> list) {
//调用迭代器对象
Iterator<Integer> iterator = list.iterator();
//while循环判断下一个指针出是否有元素,返回布尔值
while(iterator.hasNext()) {
Integer next = iterator.next();
System.out.println(next);
}
}
2)增强for【foreach】遍历------底层是迭代器遍历
for(数据类型 变量名 : 集合名) {
}
具体代码实现:
public static void method2(ArrayList<Integer> list) {
//增强for遍历
for (Integer ele : list) {
System.out.println(ele);
}
}
3)转换数组遍历
集合转换为数组:使用toArray( )方法【默认Object数组】
注意:如果方法不传参数,数组长度根据集合长度对应去创建;如果传入数组转换时’长度小于集合长度,系统会根据传入数组的数据类型和集合的长度重新创建一个新数组。
具体代码实现:
public static void method3(ArrayList<Integer> list) {
//数组法遍历
//创建一个数组
Integer[] arr = new Integer[list.size()];
//将集合转换为数组
list.toArray(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
四、有序单列集合【List】
1)特点:
1.有序【按对象进入的顺序保存对象】;
2.有索引;
3.元素可重复;
2)List集合的特有方法
方法名 | 说明 |
void add(int index, E element ) | 指定索引位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素 |
E set(int index, E element ) | 修改指定索引处的元素 |
E get(int index) | 获取指定索引处的元素 |
注意:实际开发中优先使用特有方法【特有方法相对效率高】
3)特有遍历方式:
由于有序集合有索引,所以可以使用for循环遍历,跟数组的遍历原理一样
五、有序单列集合的实现类
(一)ArrayList
ArrayList是List典型实现类,没有自己特有的功能,它的底层采用数组结构构建的实现类集合。
注意:在创建ArrayList集合对象的时候,会维护一个长度为10的Object类型的数组.,如果10个长度不够,会以1.5倍的形式进行扩容。
(二)LinkedList
LinkedList是List常用实现类集合,底层采用的是双向链表结构构建的,它的特有功能基本上是对集合首尾元素的操作。
常见方法:
方法 | 功能 |
void addFirst(E e) | 将指定元素插入到列表的开头 |
void addLast(E e) | 将指定元素添加到此列表的结尾 |
E getFirst( ) | 返回此列表的第一个元素 |
E getLast( ) | 返回此列表的最后一个元素 |
E removeFirst( ) | 删除并返回此列表的第一个元素 |
E removeLast( ) | 删除并返回此列表的最后一个元素 |
E pop( ) | 从此列表所表示的堆栈处弹出一个元素 |
void push(E e ) | 将元素推入此列表所表示的堆栈 |