Java核心知识:java集合之Collection集合

集合

集合是java提供的一种容器,可以用来存储多个数据。

集合与数组的区别:

  • 数组长度固定,集合长度可变;
  • 数组存储通用类型元素,可以存储基本类型值和引用类型。集合只存储引用类型,且类型可不一致。

实际开发中当对象比较多,使用集合进行存储。

集合按照存储结构可分为单列集合(java.util.Collection)和双列集合(java.util.Map)。它们是 Java 集合的根接口,这两个接口又包含了一些子接口或实现类。

集合的结构图如下:
在这里插入图片描述

Collection

介绍

Collection是单列集合类的根接口,有两个重要的子接口,java.util.Listjava.util.Set

java.util.List的特点是元素有序,可重复;java.util.Set元素无序不可重复。

java.util.List主要实现类有java.util.ArrayListjava.util.LinkedList

java.util.Set的主要实现类有java.util.HashSetjava.util.TreeSet

Collection通用方法

方法名称说明
boolean add(E e)向集合中添加一个元素。
boolean contains(Object o)判断集合中是否存在指定元素。
boolean isEmpty()判断集合是否为空。
int size()返回集合中元素的个数。
void clear()清除集合中的所有元素,将集合长度变为 0。
Object[] toArray()把集合转换为一个数组。
boolean remove(Object o)从集合中删除一个元素,当集合中包含了一个或多个元素 o 时,只删除第一个元素,该方法将返回 true。
Iterator<E> iterator()返回一个 Iterator 对象,用于遍历集合中的元素 。
boolean addAll(Collection c)向集合中添加集合 c 中的所有元素,如果集合对象被添加操作改变了,则返回 true。
boolean removeAll(Collection c)从集合中删除所有在集合 c 中出现的元素(相当于把调用该方法的集合减去集合 c)。如果该操作改变了调用该方法的集合,则该方法返回 true。
boolean containsAll(Collection c)判断集合中是否包含集合 c 中的所有元素。
boolean retainAll(Collection c)从集合中删除集合 c 里不包含的元素(相当于把调用该方法的集合变成该集合和集合 c 的交集),如果该操作改变了调用该方法的集合,则该方法返回 true。

示例:

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

/*
Collection接口的方法测试
 */
public class CollectionTest {
    public static void main(String[] args) {
        // 使用多态测试
        Collection<String> collection = new ArrayList<>();
        System.out.println(collection);  // 重写了toString方法

        // 添加元素add
        collection.add("a");
        collection.add("b");
        collection.add("c");
        collection.add("d");
        System.out.println(collection);  // [a, b, c, d]

        // 删除元素remove
        collection.remove("d");
        System.out.println(collection);  // [a, b, c]
        collection.remove("e");  // 删除失败返回false

        // 包含contains
        System.out.println(collection.contains("c"));  // 包含返回true

        // 判断集合是否为空isEmpty
        System.out.println(collection.isEmpty()); // 不是空返回false

        // 元素个数size
        int num = collection.size();
        System.out.println(num);  // 3

        // 清空
        collection.clear();
        System.out.println(collection);  // []
        System.out.println(collection.size());  // 0
        System.out.println(collection.isEmpty());  // true
		
		// 增强for循环
		for (String s : collection) {
            System.out.println(s);
        }
    }
}

Iterator迭代器

java,util.Iterator接口,对集合进行迭代的迭代器。

有如下两个方法:

1.boolean hasNext()判断还有没有元素可取,有返回true,否则false

2.next():返回迭代的下一个元素

使用迭代器,需要接口的实现类对象,使用Collection接口的iterator()方法就返回了迭代器的实现类,使用Iterator接口接受(多态),Iterator的泛型和集合接口相同。

示例:

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

public class IteratorTest {
    public static void main(String[] args) {
        Collection<String> collection = new ArrayList<>();
        collection.add("aa");
        collection.add("bb");
        collection.add("cc");
        collection.add("dd");

        // 创建一个迭代器
        Iterator<String> iterator = collection.iterator();

        iterator.hasNext();
        System.out.println(iterator.next());  // aa

        // 循环遍历
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

        for (Iterator<String> iterator2 = collection.iterator(); iterator2.hasNext() ;) {
            System.out.println(iterator2.next());
        }

    }
}

Collection之List集合

List通用特性

java.util.List接口继承Collection接口。

List的特点

  • 有序
  • 有索引
  • 允许元素重复

所以List有和索引相关的特有方法:

public void add(int index, E element):添加元素到指定位置

public E get(int index):返回指定位置的元素

public E remove(int index):移除指定位置元素并返回

public E set(int index, E element):替换指定位置元素并返回替换前的那个元素

public int indexOf(Object o):获取指定元素在集合中第一次出现的索引下标

subList(2,4):取索引下标在大于等于2小于等于4的元素

boolean addAll(int index, Collection<? extends E> c):在指定索引位置把新集合元素加到原集合

ArrayList集合和 LinkedList集合

ArrayList和 LinkedList比较

ArrayList底层是用数组结构进行存储的,数组的存储空间是连续的,可以通过下标来访问元素。
特点:查询快,增删慢。支持异步。

LinkedList的底层采用了双向链表数据结构,所以空间存储上内存地址不连续。不能通过数学表达式计算被查找元素的内存地址,所以每次查找的时候都是从头节点开始遍历,直到找到位置。
特点:增删快,查询慢。支持异步

使用区别:ArrayList更适合随机查找,LinkedList更适合删除和添加。

LinkedList集合特有方法

public void addFirst(E e):添加到第一个元素,等于add(E e);

public void addLast(E e):添加到最后一个元素;

public boolean offer(E e):向链表末尾添加元素,返回是否成功;

public boolean offerFirst(E e):头部插入元素,返回是否成功;

public boolean offerLast(E e):尾部插入元素,返回是否成功;

public E removeFirst():删除并返回第一个元素,等于public E remove()

public E removeLast():删除并返回最后一个元素;

public E remove():删除并返回第一个元素;

public E getFirst():返回第一个元素;

public E getLast():返回最后一个元素;

public int indexOf(Object o):查找指定元素从前往后第一次出现的索引;

public int lastIndexOf(Object o):查找指定元素最后一次出现的索引;

public E peek():返回第一个元素;

public E element():返回第一个元素;

public E peekFirst():返回头部元素;

public E peekLast():返回尾部元素;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ethan-running

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值