java学习笔记之集合1

来源:互联网 发布:ubuntu flash命令行 编辑:程序博客网 时间:2024/05/29 04:50

我们先来看看集合这个大家族

这里写图片描述

大家可以看到图中关于集合有这么多的接口或者类(还不包括全部的),但其实我们常用的也就几个,图中深绿色的为常用实现类

如果没有集合,大家要保存一组数据,是不是只能用数组呢?
类似于这样
这里写图片描述
我们可以看到在数组即可以存储基本类型也可以存储引用类型,这儿具体存储的细节就不说了,大家可以搜搜看
数组存储的优点是查询快,我们可以通过数组下标快速查询到对应的元素,但是数组的增删较慢,因为需要大量的移位
而且数组元素在内存上是连续存储的,它其实是一种内存结构,而集合在元素的存储上是用到了数据结构,集合也叫容器,

今天先给大家说说集合框架中的Collection

集合只能存储引用类型,基本类型会自动装箱为包装类
先看看源码:

这里写图片描述
Collection接口中有上面的这些属性和方法,在面相对象中,属性和方法是用来反映一类事物的属性和行为的,那这个Collection就有图里的这些属性和行为,比如集合的大小,判断是否为空,把集合转化为数组,对集合中的元素进行操作的一些方法等,这些方法的具体介绍和使用大家可以翻看api

我们顺着图往下看:

Collection下面这么多实现类,可以把每个实现类可以看做一个具体的容器,那sun公司为什么要写这么多的实现类呢??因为每个实现类在底层的实现方式(就是用到的数据结构)是不一样的,在程序设计的过程中,我们可以根据不同的应用场合来选择对应的容器,举个例子,厨房里有很多盘子,碗(容器),这些盘子和碗有很多类别(不同的数据结构),有盛汤的,盛饭的,盛菜的,我们在做饭的时候可以选择对应的餐具来盛东西。如果把所有的餐具都做成盘子形状的是不是不太合适呢!

List

List这个容器存储元素的特点是:有序,可以重复,只能存单一的元素
常用实现类ArrayList,LinkedList,Vector
ArrayList:
底层实现方式为数组,从名字也可以看出来,在数组的基础上加上了容器的功能,那它肯定也有数组的优缺点:查询元素快,增删元素慢,而且也特别消耗资源。

LinkedList:
底层实现方式为双向链表,链表的优缺点:查询元素相对较慢,增删元素快
这里写图片描述

Vector
底层和ArrayList集合相同,但是Vector是线程安全的,但效率较低,现在很少使用了

Set

Set这个容器存储元素的特点是:无序,不可重复,只能存储单一的元素
常用实现类:HashSet,TreeSet
HashSet
前面说到ArrayList和LinkedList在存储元素时有相对的优缺点,我们可不可以中和一下,设计出来一种数据结构,在查询和增删元素的时候效率都快一点呢?这个时候就有了HashSet
查看HashSet的部分源码:
这里写图片描述
我们看到,我们在通过无参构造创建HashSet实例时,会返回一个Map
这里写图片描述
所以说HashSet其实是一个HashMap,只不过HashSet只是用到了HashMap中的key

TreeSet
它上面还有一个SortedSet,虽然Set存储元素的特点是无序的,但是TreeSet在插入元素是可以按照元素的“大小”顺序进行插入的。

Queue

很少用到,就不说了

迭代器

Collection继承了Iterable,这个Iterable中仅仅只保存了一个Iterator的引用,它表示Collection是可迭代的,然后Collection中保存了一个Iterator的引用,说明Collection和Iterator是关联关系,我们可以通过Collection点直接去引用Iterator,这个Iterator又是个什么呢??和Iterable相比,大家可以把它看做一个“具体”的迭代器,它的作用就是遍历集合中的元素,在遍历的过程中也可以对元素做删除的操作。因为Collection继承与Iterable,所以说Collection的所有实现类都可以使用迭代器
若有不正之处,请多多谅解并欢迎批评指正,不甚感激。

原创粉丝点击