集合——Collection

Posted dch-21

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合——Collection相关的知识,希望对你有一定的参考价值。

纯手工敲上去的,可能有些许偏差,见谅

集合的框架

技术图片

Collection集合

存储特点

  • 是单列集合的顶级接口。在这种集合中存储的数据只占一列。所有元素直接存储于各种数据结构中
  • Collection集合没有下标的概念。
    是否有无下标,要通过它底层实现来进行理解。若是数组和链表则就会有下标,反正则没有。

Collection中的方法

修饰&返回值 方法 描述
boolean add(E element) 将一个指定类型的元素, 添加到集合的末尾。
boolean addAll(Collection<E> coll) 批量添加,将一个集合中的所有的元素,添加到当前集合的末尾。
boolean remove(E ele) 删除集合中指定的元素。
boolean removeAll(Collection<E> coll) 删除集合中所有的在参数集合中存在的元素(删除交集)。
boolean retainAll(Collection<E> coll) 保留集合中所有的在参数集合中存在的元素,删除其他元素(保留交集)。
void clear() 清空集合中的所有的数据。
boolean removeIf(Predicate<E> predicate) 删除集合中满足指定条件的数据。
boolean contains(E ele) 判断一个集合中是否包含指定的元素。
boolean containsAll(Collection<E> coll) 判断参数集合中, 是否所有的元素都在当前集合中包含。
int size() 获取集合中元素的数量, 类似于数组 length。
boolean isEmpty() 判断一个集合是否是空集合。
Object[] toArray() 将集合中的元素,转成 Object 数组。
T[] toArray(T[] arr) 将集合中的元素,转成指定类型的数组。

集合的三种遍历方式

-增强for

for (String element : collection) {
        System.out.println(element);
    }

注意事项

在使用增强for循环进行元素的遍历过程中, 不要修改集合中的内容 !!! 否则, 会出现 ConcurrentModificationException 。

-迭代器(Iterator),才是真正用来遍历集合的。

工作原理

  • 使用集合的 iterator() 方法,获取到一个迭代器对象。
  • 这个迭代器对象, 内部维护了一个引用, 指向集合中的某一个元素。 默认指向-1位。
  • 使用next()方法, 向后移动一位元素指向, 并返回新的指向的元素。
  • 如果使用next()方法, 向后移动指向的时候, 已经超出了集合的范围, 指向了一个不存在的元素, 会抛出异常 NoSuchElenmentException。
  • 一般情况下, 配合 hasNext() 方法一起使用的。
     // 1. 获取到一个迭代器对象
    Iterator<String> iterator = collection.iterator();
    // 2. 通过hasNext判断是否还有下一个元素
    while (iterator.hasNext()) {
        // 3. 向后指向,并返回这个新的指向的元素
        String ele = iterator.next();
        System.out.println(ele);
    }

注意:获取迭代器必须紧挨while循环,否则会出现一些错误,比如并发修改异常
错误示例
技术图片
技术图片

-forEach(jdk 1.8及以后提供的方法)

 collection.forEach(System.out::println);

示例代码1

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Test {
    public static void main(String[] args) {
        Collection<String> collection=new ArrayList<>();
        Collection<String> temp=new ArrayList<>();
        collection.add("lucy");
        collection.add("lily");
        collection.add("poly");
        collection.add("uncle wang");
        //使用迭代器进行遍历
        Iterator<String> iterator=collection.iterator();
        while(iterator.hasNext()){
            System.out.print(iterator.next()+" ");
        }
    }
}

技术图片

示例代码2

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Test {
    public static void main(String[] args) {
        Collection<String> collection=new ArrayList<>();
        Collection<String> temp=new ArrayList<>();
        collection.add("lucy");
        collection.add("lily");
        collection.add("poly");
        collection.add("uncle_wang");
        //使用增强for遍历
        for(String i:collection){
            System.out.print(i+" ");
        }
        System.out.println();
        System.out.println("=====================");
        temp.add("uncle_wang");
        temp.add("poly");
        temp.add("lily");
        temp.add("li lei");
        collection.addAll(temp);
        //使用迭代器进行遍历
        Iterator<String> iterator=collection.iterator();
        while(iterator.hasNext()){
            System.out.print(iterator.next()+" ");
        }
    }
}

技术图片

示例代码3

public class Test {
    public static void main(String[] args) {
        Collection<String> collection=new ArrayList<>();
        Collection<String> temp=new ArrayList<>();
        Collection<String> del=new ArrayList<>();
        Collection<String> mainTain=new ArrayList<>();
        mainTain.add("lily");
        mainTain.add("lucy");
        mainTain.add("uncle_wang");
        mainTain.add("xiao_feng");
        mainTain.add("xiao_huang");
        del.add("lily");
        del.add("uncle_wang");
        collection.add("lucy");
        collection.add("lily");
        collection.add("poly");
        collection.add("uncle_wang");
        temp.add("uncle_wang");
        temp.add("poly");
        temp.add("lily");
        temp.add("li_lei");
        collection.addAll(temp);
        System.out.println("原collection集合:");
        for (String i : collection) {
            System.out.print(i+" ");
        }
        System.out.println();
        System.out.println("======================");

        collection.remove("poly");
        System.out.println("删除poly后的collection集合:");
        for (String i : collection) {
            System.out.print(i+" ");
        }
        System.out.println();
        System.out.println("======================");
        collection.removeAll(del);
        System.out.println("删除与del集合中相同的元素后的collction集合:");
        for (String i : collection) {
            System.out.print(i+" ");
        }
        System.out.println();
        System.out.println("======================");
        System.out.println("原mainTain集合:");
        for (String i : mainTain) {
            System.out.print(i+" ");
        }
        System.out.println();
        System.out.println("使用retainAll后的mainTain集合:");
        mainTain.retainAll(del);
        for (String i : mainTain) {
            System.out.print(i+" ");
        }
        System.out.println();
        System.out.println("======================");
    }
}

技术图片

将集合转成特定类型的数组

 String[] ret = collection.toArray(new String[0]);
 Integer[] ret = collection.toArray(new Integer[0]);
 Double [] ret = collection.toArray(new Double[0]);
 Object[] array = collection.toArray();

以上是关于集合——Collection的主要内容,如果未能解决你的问题,请参考以下文章

阶段1 语言基础+高级_1-3-Java语言高级_04-集合_01 Collection集合_5_迭代器的代码实现

代码片段 - Golang 实现集合操作

JavaScript HTML DOM 集合(Collection)

集合框架及背后的数据结构Collection,MapArrayList的使用

laravel特殊功能代码片段集合

集合类 collection接口 ArrayList