集合

发布时间 2023-11-02 09:25:43作者: 晓乎

  实际开发中,常涉及各种数据结构,如列表、栈、队列等。他们能存储大量对象,有不同的存储特色和操作模式。Java将支持数据结构的一组类、接口统称为集合框架 ,封装在java.util包中。

  集合框架中的很多类功能是相似的,所以用接口来规范类。Collection和Map被视为Java集合框架里的两个根接口,代表两种不同特色数据集:集合和映射。集合直接存储对象,映射则是以键值对<key,value>方式存储对象。

Collection集合

  Collection集合是用来存放对象的容器,相对于数组而言它更加灵活,方便。通常把集合理解为加强的数组结构,因为它可以完成数组的所有能完成的事,并且还提供了很多可以使用的方法。要想学习集合就必须了解集合的结构。

  所有Collection的集合类都要继承Collection,它的两个直接子类,List和Set。这两个是接口不能直接创建对象,需要创建具体的子类对象。这两个子类的区别在于:

  • List 的特点是有索引、存取有序、可重复。
  • Set 的特点是无索引、存取无序(LinkedHashSet除外)、不可重复。

     List有两个重要的子类,一个是ArrayList和LinkedList。其中ArrayList是类似数组的存储结构,它的特点就是查询效率很高,但是添加删除元素效率很低。因为如果要改动某个地方,那么那个位置后面的元素都需要移动,所以效率低下。但是LinkedList就不一样,它是链表结构,对于链表结构来讲由于没有下标,所以查找效率低下,但是更改元素效率却很高。详情情况可参考数据结构里链表的增删。

1 Collection接口中的常用方法

Collection集合常用方法如下:

  • public boolean add(E e):把给定的对象添加到当前集合中 。
  • boolean addAll(Collection<? extends E> c) 把集合C中的元素全部添加到集合中,若指定集合元素改变返回true
  • public void clear():清空集合中所有的元素。
  • public boolean remove(E e):把给定的对象在当前集合中删除。
  • boolean removeAll(Collection<?> c) 删除指定集合包含集合c的元素
  • public boolean contains(E e):判断当前集合中是否包含给定的对象。
  • public boolean isEmpty():判断当前集合是否为空。
  • public int size():返回集合中元素的个数。 public Object[] toArray():把集合中的元素,存储到数组中。
  • T[] toArray(T[] a) 将集合转换为T类型的数组

1.1 Collection集合的遍历

迭代器遍历

  Java迭代器(Iterator)是 Java 集合框架中的一种机制,是一种用于遍历集合(如列表、集合和映射等)的接口。它提供了一种统一的方式来访问集合中的元素,而不需要了解底层集合的具体实现细节。

  迭代器接口定义了几个方法,最常用的是以下三个:

    • next() - 返回迭代器的下一个元素,并将迭代器的指针移到下一个位置。

    • hasNext() - 用于判断集合中是否还有下一个元素可以访问。

    • remove() - 从集合中删除迭代器最后访问的元素(可选操作)。

Iterator 类位于 java.util 包中,使用前需要引入它,语法格式如下:

import java.util.Iterator; // 引入 Iterator 类

  通过使用迭代器,我们可以逐个访问集合中的元素,而不需要使用传统的 for 循环或索引。这种方式更加简洁和灵活,并且适用于各种类型的集合。

  集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前

举例:

1、获取一个迭代器

// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;

public class RunoobTest {
    public static void main(String[] args) {

        // 创建集合
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("好");
        sites.add("好");
        sites.add("学");
        sites.add("习");

        // 获取迭代器
        Iterator<String> it = sites.iterator();

        // 输出集合中的第一个元素
        System.out.println(it.next());
    }
}

2、循环集合元素

// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;

public class RunoobTest {
    public static void main(String[] args) {

        // 创建集合
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("好");
        sites.add("好");
        sites.add("学");
        sites.add("习");

        // 获取迭代器
        Iterator<String> it = sites.iterator();

        // 输出集合中的所有元素
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

foreach遍历  

  foreach语句是java5的新特征之一,在遍历数组、集合方面,foreach为开发人员提供了极大的方便。foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而,任何的foreach语句都可以改写为for语句版本。

public class Demo{
 
     public void static void main(String[] args){
 
         int[] arr = new int[]{1,3,6,2,9};
 
         for(int e : arr){
              System.out.print(e);
         }
    }
} 

任务需求

  创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合。

1.2 List集合概念和特点

List集合概述

  List集合是有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引访问元素,并搜索列表中的元素。 List集合特点: 有索引 、可以存储重复元素 、元素存取有序.

       List 接口实现的类有: ArrayList(实现动态数组),Vector(实现动态数组),LinkedList(实现链表),Stack(实现堆栈)。 ArrayList集合 :底层是数组结构实现,查询快、增删慢 LinkedList集合 :底层是链表结构实现,查询慢、增删快

 List集合的常用方法    

(1)ArrayList集合的特有方法

(2)LinkedList集合的特有方法

任务需求

    实现医院病人排队叫号就诊程序,效果如下:

1.3 Set集合

  注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素,用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。