14 集合类库上

170 阅读5分钟

1 集合概述

  • java中记录单个数据内容时,使用变量
  • java中记录多个类型相同的数据时,使用数组
  • java中记录多个类型不同的数据时,创建对象
  • java中记录多个类型相同的对象时,使用对象数组
  • java中记录多个类型不同的对象时,使用集合

在java中集合框架顶层框架是:java.util.Collection集合和java.util.Map集合,Collection集合中存取元素的基本单位是单个元素,而Map集合中存取元素的基本单位是单对元素。

01 集合框架的两张图.png

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);
    }
}