1 集合概述
- java中记录单个数据内容时,使用变量
- java中记录多个类型相同的数据时,使用数组
- java中记录多个类型不同的数据时,创建对象
- java中记录多个类型相同的对象时,使用对象数组
- java中记录多个类型不同的对象时,使用集合
在java中集合框架顶层框架是:java.util.Collection集合和java.util.Map集合,Collection集合中存取元素的基本单位是单个元素,而Map集合中存取元素的基本单位是单对元素。
2 Collection集合
Collection接口是List接口、Queue接口以及Set接口的父接口,所以Collection接口中的方法可以操作List集合、Queue集合以及Set集合。
Collection接口中常用方法有:
| 常用方法 | 功能介绍 |
|---|---|
| boolean add(E e) | 向集合中添加对象 |
| boolean addAll(Collection<? extends E> c) | 将参数集合中所有元素添加到当前集合中 |
| boolean contains(Object o) | 判断集合中是否包含参数指定对象 |
| boolean containsAll(Collection<?> c) | 判断集合是否包含参数指定的所有对象 |
| boolean retainAll(Collection<?> c) | 保留当前集合中存在且参数集合中也存在的对象 |
| boolean remove(Object o) | 删除集合中参数所指定的对象 |
| boolean removeAll(Collection<?> c) | 删除集合中参数指定的所有对象 |
| void clear() | 清空集合 |
| int size() | 返回集合中对象的个数 |
| boolean isEmpty() | 判断集合是否为空 |
| boolean equals(Object o) | 判断是否相等 |
| int hashCode() | 返回集合的哈希码值 |
| Object[] toArray() | 将集合转为数组 |
| Iterator iterator() | 获取集合迭代器 |
3 Iterator接口
Java.util.Iterator接口主要描述迭代器对象,用来遍历集合中的所有对象元素,由于Collection接口继承了Iterator接口,因此所有实现Collection接口的实现类都可以使用Iterator迭代器对象。
Iterator接口中常用方法:
| 方法声明 | 功能介绍 |
|---|---|
| boolean hasNext() | 判读集合中是否有可以迭代的元素 |
| E next() | 取出一个元素并指向下一个元素 |
| void remove() | 删除访问到的最后一个元素 |
使用Iterator迭代器对象实现toString方法的打印效果,具体代码如下:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTest {
public static void main(String[] args) {
Collection c=new ArrayList();
c.add(1);
c.add("hello");
System.out.println("集合c中元素有:"+c);
Collection c1=new ArrayList();
c.add(2);
c.add("java");
c.addAll(c1);
System.out.println("集合c中元素有:"+c);
Iterator iterator=c.iterator();
StringBuilder stringBuilder=new StringBuilder();
stringBuilder.append("[");
while (iterator.hasNext()){
Object ob=iterator.next();
if(!iterator.hasNext()){
stringBuilder.append(ob).append("]");
}
else {
stringBuilder.append(ob).append(",").append(" ");
}
}
System.out.println("迭代器遍历的集合元素有:"+stringBuilder);
}
}
4 for each循环
for each循环是java5开始有的,是一种增强型for循环语句,可以应用于数组和集合遍历,是经典迭代的“简化版”。
for each循环语法格式是: for(元素类型 变量名:数组/集合名称){
循环体;
}
使用for each循环遍历集合中所有元素,具体代码如下:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTest {
public static void main(String[] args) {
Collection c=new ArrayList();
c.add(1);
c.add("hello");
System.out.println("集合c中元素有:"+c);
c.add(2);
c.add("java");
for(Object ob2:c){
System.out.println(ob2);
}
}
}
5 List集合
List集合是Collection集合的子集合,List集合允许有重复的元素并且有先后放入的次序,List集合的实现类有:ArrayList类、LinkedList类、Stack类以及Vector类等。
下面介绍一下List集合实现类的特点:
- ArrayList类的底层是采用动态数组进行数据管理,支持下标访问,增删元素不方便
- LinkedList类的底层采用双向链表进行数据管理,访问不方便,但增删元素方便
- ArrayList和LinkedList的方法在逻辑上完全一样,只是在性能上有差别,ArrayList适合频繁进行随机访问而LinkedList则适合频繁进行插入和删除,所以在不考虑性能的情况下,可以忽略两者之间的区别
- Stack类底层是采用动态数组进行数据管理,该类描述了一种先进后出的数据结构,叫做栈(last in first out LIFo)
- Vector类底层也是用动态数组进行数据管理,该类与ArrayList类相比,属于线程安全类,因此效率要低些,在实际开发中很少使用。
List集合常用方法:
| 方法声明 | 功能介绍 |
|---|---|
| void add(int index, E e) | 向集合中指定的位置插入对象 |
| void addAll(int index,Collection<? extends E> c) | 向集合中插入参数集合中所有元素 |
| E get(int index) | 返回参数指定位置的对象 |
| int indexOf(Object o) | 集合中查找参数对象的下标 |
| int lastIndexOf(Object o) | 从集合后面往前查找参数对象下标 |
| E set(int index,E e) | 修改集合中指定位置元素 |
| E remove(int index) | 删除集合中参数指定位置元素 |
| List subList(int s,int e) | 获取集合的子集合 |
6 Queue集合
Queue集合也是Collection集合的子集合,与List集合是平行关系,Queue集合主要描述先进先出的数据结构,叫做队列(firat in first out FIFO),Queue集合的实现类是LinkedList类,所以Queue在增删方面有优势。
Queue集合常用方法:
| 方法声明 | 功能介绍 |
|---|---|
| boolean offer(E e) | 向队列尾部插入元素 |
| E poll() | 删除队首元素并返回 |
| E peek() | 返回队首元素(不会删除) |
Queue集合使用实例,代码:
import java.util.LinkedList;
import java.util.Queue;
public class QueueTest {
public static void main(String[] args) {
Queue queue=new LinkedList();
for(int i=1;i<=5;i++){
queue.offer(i*11);
}
System.out.println("队列中元素有:"+queue);
System.out.println("队列首部元素是:"+queue.peek());
int len= queue.size();
for(int i=1;i<=len;i++){
System.out.println("出队元素是:"+queue.poll());
}
System.out.println("队列中元素有:"+queue);
}
}