一、集合概述
集合:是Java中提供的一种容器,可以用来存储多个数据。
- 集合和数组的区别
- 数组的长度是固定的,集合的长度是可变的
- 数组中存储的是同一类型的数据,并且可以存储基本数据类型和引用数据类型的数据,集合存储的都是对象,而且对象的类型可以不一致,在开发中一般当对象多的时候,使用集合进行存储
注意:集合只能存储对象
二、集合框架
JavaSE提供了大量满足各种需求的API,在使用这些API前,先了解其继承与接口操作架构,才能了解何时采用哪个类,以及类之间如何彼此合作,从而达到灵活应用。
集合按照其存储结构可以分为两大类,分别是单列集合
java.util.Collection
和双列集合java.util.Map
**
Collection:**单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.List
和java.util.Set
,
其中,
List
的特点是元素有序,元素可重复
Set
的特点是元素无序,而且不可重复
List
接口的主要实现类有java.util.ArrayList
和java.util.LinkedList
Set
接口的主要实现类有java.util.HashSet
和java.util.TreeSet
从上面的描述可以看出JDK中提供了丰富的集合类库,接下来通过一张图来描述整个集合类的继承体系
三、Collection常用方法
方法 | 说明 |
---|---|
boolean add(E e) | 向集合中添加元素 |
boolean remove(E e) | 删除集合中的某个元素 |
void clear() | 清空集合所有的元素 |
boolean contains(E e) | 判断集合中是否包含某个元素 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 获取集合的长度 |
Object[] toArray() | 将集合转换为数组 数组类型只能是Object,如果想要转换其他类型,那么遍历集合对每一个对象进行转换 |
T[] toArray(T[]) | 将集合转换为数组 数组类型可以是任意 |
代码案例:
package cn.com.example11;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class CollectionClass {
public static void main(String[] args) {
// 实例化Collection对象
// 由于Collection是一个接口,那么采用多态的形式创建子接口的实现类对象
Collection collection = new ArrayList();
// 添加元素
collection.add(20); // 存储的数据是引用类型【自动装箱】
collection.add(new Integer(20));
/*
* 自动装箱:基本类型自动封装成引用类型
* int num = 12;
* Integer it = num;
*
* 自动拆箱:引用类型自动拆分成基本类型
* Integer it = new Integer(20);
* int num = it;
* */
collection.add("admin");
// 删除指定的数据
collection.remove(20);
// 判断集合中是否包含指定的数据
collection.contains("admin");
// 判断集合是否为空
collection.isEmpty();
// 获取集合长度
int size = collection.size();
// 集合转换为数组
Object[] objArray = collection.toArray();
// 清空集合
collection.clear();
System.out.println(collection);
handlerToArray();
handlerToArrayT();
}
/**
* 集合转换数组-任意类型-toArray()
*/
public static void handlerToArray(){
Collection collection = new ArrayList();
collection.add(1);
collection.add(2);
Object[] objects = collection.toArray();
int[] arr = new int[collection.size()];
for (int i = 0; i < objects.length; i++) {
arr[i] = (int)objects[i];
}
System.out.println(arr[0]);
}
/**
* 集合转换数组-任意类型-toArray(T[])
* 前提是:需要指定泛型
*/
public static void handlerToArrayT(){
Collection<Integer> collection = new ArrayList();
collection.add(1);
collection.add(2);
Integer[] arr = collection.toArray(new Integer[collection.size()]);
System.out.println(arr[0]);
}
}
四、集合遍历
1、Iterator接口
在程序开发中,经常需要遍历集合中的所有元素,针对这种需求,JDK专门提供了一个接口java.util.Iterator,Iterator接口也是Java集合中的一员,但它与Collection、Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问【遍历】Collection中的数据,因此Iterator对象也被称为迭代器。
想要遍历Collection集合,那么就要获取该集合迭代器完成迭代操作。
迭代:就是Collection集合元素的通用获取方式,在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就继续取出来,一直把集合中所有的元素全部取出,这种取出方式专业术语称为迭代。
迭代器方法:
方法 | 说明 |
---|---|
public Iterator iterator() | 获取集合对应的迭代器,用来遍历集合中的元素 |
public E next() | 返回迭代的下一个元素 |
public boolean hasNext() | 如果仍有元素可以迭代,则返回true |
代码案例:
/**
* 迭代器
*/
public static void handlerIterator(){
Collection collection = new ArrayList();
collection.add(1);
collection.add(2);
collection.add(3);
// 获取迭代器
Iterator iterator = collection.iterator();
// 迭代元素
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
2、增强for
增强for循环也称之为for each,是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的,它的内部原理其实是一个Iterator,所以在遍历的过程中,不能对集合中的元素进行
CD
操作
语法格式:
for(数据类型 变量名 : Collection/Array){
// 代码
}
它用于遍历Collection和Array,通常只进行遍历,不要在遍历的过程中对集合中的元素进行CD操作
1、遍历数组
/**
* 遍历数组
*/
public static void handlerForArray(){
int[] arr = {1,2,3,4,5,6};
for (int i : arr) {
System.out.println(i);
}
}
2、遍历集合
/**
* 遍历集合
*/
public static void handlerForCollection(){
Collection<Integer> collection = new ArrayList();
collection.add(1);
collection.add(2);
collection.add(3);
for (Integer i : collection) {
System.out.println(i);
}
}