Java集合

一、集合的由来

通常,我们的Java程序需要根据程序运行时才知道创建了多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是!数组只能存放同一类型的数据,而且其长度是固定的,那怎么办了?集合便应运而生了。

二、集合是什么?

Java集合类存放在java.util包中,是一个用来存放对象的容器。

注意:

1.集合只能存放对象。比如你存入一个int型数据66放入集合中,其实它是自动转换成Integer类后存入的,Java中每一种基本数据类型都有对应的引用类型。

2.集合存放的都是对象的引用,而非对象本身。所以我们称集合中的对象就是集合中对象的引用。对象本身还是放在堆内存中。

3.集合可以存放不同类型,不限数量的数据类型。

三、Java集合框架

首先,我们来看一张图

在这里插入图片描述

发现一个特点,上述所有的集合类,除了map系列的集合,即左边的集合都实现了Iterator接口。

Iterator是一个用来遍历集合中元素的接口,主要有hashNext(),next(),remove()三种方法。

它的子接口ListIterator在它的基础上又添加了三种方法,分别是add(),previous(),hasPrevious()。

从图中我们可以看到:

1.集合主要分为Collection和Map两个接口。

2.Collection又分别被List和Set继承。

3.List被AbstractList实现,然后分为3个子类,ArrayList,LinkList和VectorList。

4.Set被AbstractSet实现,又分为2个子类,HashSet和TreeSet。

5.Map被AbstractMap实现,又分为2个子类,HashMap和TreeMap。

6.Map被Hashtable实现。

四、Iterator迭代器

它是Java集合的顶层接口(不包括map系列的集合,Map接口是map系列集合的顶层接口)

Object next():返回迭代器刚越过的元素的引用,返回值是Object,需要强制转换成自己需要的类型。

boolean hasNext():判断容器内是否还有可供访问的元素。

void remove():删除迭代器刚越过的元素。

所以除了map系列的集合,我么都能通过迭代器来对集合中的元素进行遍历。

注意:我们可以在源码中追溯到集合的顶层接口,比如Collection接口,可以看到它继承的是类Iterable

public interface Collection<E> extends Iterable<E> {
    //Query Operations
    ...
}

那这就得说明一下Iterator和Iterable的区别:

Iterable:存在于java.util包中。

public interface Iterable<T>{
    /**
    * Returns an iterator over elements of type {@code T}
    *
    * @return an Iterator
    */
    Iterator<T> iterator();
    ...
}

我们可以看到,里面封装了 Iterator 接口。所以只要实现了Iterable接口的类,就可以使用Iterator迭代器了。

Iterator:存在于java.util包中。核心的方法next(),hasNext(),remove()。

这里我们引用一个Iterator 的实现类 ArrayList 来看一下迭代器的使用:暂时先不管 List 集合是什么,只需要看看迭代器的用法就行了

import java.util.*;

public class test{
public static void main(String[] args) {
// 产生一个List集合,典型实现为ArrayList。
List list = new ArrayList();
/* List list = new ArrayList();结果出错
注:test.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
*这样的情况下要用泛型,容器里不能放object而是放具体类型。
*/

    //添加三个元素
    list.add("Tom");
    list.add("Bob");
    list.add("Jack");
    //构造List的迭代器
    Iterator it = list.iterator();
    //通过迭代器遍历元素
    while (it.hasNext()){
        Object obj = it.next();
        System.out.println(obj);
    }
}

}

五、Collection接口介绍

Collection的作用就是规定了一个集合有哪些基本的操作。

coolection的常规用法

Collection c = new ArrayList();
Iterator it = c.iterator();
while (it.hasNext()){
    Object obj = it.next();
}

在这里插入图片描述
这里主要是插入数据,清空数据,是否包含,是否相等,集合里的数据个数和转化成熟组这几种操作。

比如:

int size() 获取元素个数

boolean isEmpty() 是否个数为零

boolean contains(Object element) 是否包含指定元素

boolean add(E element) 添加元素,成功时返回true

boolean remove(Object element) 删除元素,成功时返回true

Iterator iterator() 获取迭代器

还有些操作整个集合的方法,比如:

boolean containsAll(Collection<?> c)  是否包含指定集合 c 的全部元素

boolean addAll(Collection<? extends E> c) 添加集合 c 中所有的元素到本集合中,如果集合有改变就返回 true

boolean removeAll(Collection<?> c) 删除本集合中和 c 集合中一致的元素,如果集合有改变就返回 true

boolean retainAll(Collection<?> c)  保留本集合中 c 集合中两者共有的,如果集合有改变就返回 true

void clear()  删除所有元素

还有对数组操作的方法:
  Object[] toArray() 返回一个包含集合中所有元素的数组

T[] toArray(T[] a) 返回一个包含集合中所有元素的数组,运行时根据集合元素的类型指定数组的类型

于Collection接口相关还有一个抽象类AbstractCollection:

AbstractCollection是一个抽象类,实现了Collection接口的部分功能,实现了一些最基本的通用操作,把复杂的和业务相关的延迟到子类实现。

在AbstractCollection中,主要实现了contains(), isEmpty(), toArray(), remove(), clear() 这几个操作。

转载自:博客园 作者:黎先生 点击跳转链接https://www.cnblogs.com/lixiansheng/p/11348050.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值