一、集合的由来

  通常,我们的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<String> list = new ArrayList<String>();/* 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<E> 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> T[] toArray(T[] a) 返回一个包含集合中所有元素的数组,运行时根据集合元素的类型指定数组的类型

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

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

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

转载于:https://www.cnblogs.com/lixiansheng/p/11348050.html

Java集合(一)、什么是Java集合?相关推荐

  1. Map集合的遍历(java)

    2019独角兽企业重金招聘Python工程师标准>>> Map集合通过entrySet 和 keySet都可以使用迭代器 以及for循环拿到key和value: import jav ...

  2. java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类...

    本文关键词: java集合框架  框架设计理念  容器 继承层级结构 继承图 集合框架中的抽象类  主要的实现类 实现类特性   集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...

  3. mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String

    mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String 参考文章: (1)mybati ...

  4. java 原生sql批量插入,Java对象集合转MySQL批量插入语句

    Mybatis的批量插入确实很好用,但是当数据量特别大的时候可能一次批量插入2000条数据就死翘翘了.怎么办呢?当然是原生sql是最快的啦,10000条数据秒入无压力.下面是将对象集合拼接成批量插入M ...

  5. java hashset应用_三.java集合的应用

    目录 需求一:存放学生信息 定义学生类,按年龄升序,将学生信息存放在集合中,遍历学生的信息(Student注释部分为后续的HashSet使用,此处可忽略) 思路:①定义一个学生类,声明name,age ...

  6. java 泛型 t_Kotlin(2) 泛型与集合

    前言 以一个java老鸟的角度,如何去看 kotlin.Java源代码应该如何用Kotlin重构.如何正确学习kotlin并且应用到实际开发中.本文将会探究. 本文分两大块,重难点和潜规则. 重难点: ...

  7. 刷题练习记录(3)——无重复字符的最长子串(JAVA 和 Python)——set()函数/集合...

    [题号003]无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的 ...

  8. java+实现集合并运算_JAVA程序设计报告+集合运算

    JAVA程序设计报告+集合运算 JAVA程序设计报告集合的运算(交并差)学生学号专业信息工程(系统工程方向)院系信息与控制学院实习时间三周:指导老师陈金辉目录实验目的试验设计实验源程序程序设计调试不足 ...

  9. 1.15 Java 9新增的不可变集合

    Java 9新增的不可变集合 Java 9 版本以前,假如要创建一个包含 6 个元素的 Set 集合,程序需要先创建 Set 集合,然后调用 6 次 add() 方法向 Set 集合中添加元素.Jav ...

  10. JAVA集合框架中的常用集合及其特点、适用场景、实现原理简介

    JDK提供了大量优秀的集合实现供开发者使用,合格的程序员必须要能够通过功能场景和性能需求选用最合适的集合,这就要求开发者必须熟悉Java的常用集合类.本文将就Java Collections Fram ...

最新文章

  1. 贪心 Codeforces Round #300 A Cutting Banner
  2. mesos安装,webui显示不正常
  3. 【编译原理】关于解释器和编译器的讨论
  4. 为节省内存,Firefox 将用新方式阻止加载没用到的标签页
  5. 在单独的WAR组件中对SPA资源和API实现进行分区
  6. 小b删列(51Nod-2523)
  7. python无限循环语句的代码_如何在Python中实现非阻塞无限循环
  8. oracle 的数据库、表空间、表是什么关系
  9. 服务器视频文件外链,视频图床 视频外链网站 视频上传外链分享
  10. 实战四:根据总步数计算消耗的热量值
  11. acegis连接使用方法_arcgis使用教程.doc
  12. Android studio MacBook快捷键
  13. linux国际象棋,国际象棋通用引擎协议
  14. 【CV语义分割】全卷积神经网络FCN(更新ing)
  15. 计算机对康复治疗学的帮助,我院康复医学科引进认知训练配合计算机心理失语症脑功能评估训练系统...
  16. Linux 区别 chown和chmod的用法
  17. 莫言出力、章泽天站台!京东百万豪奖作家背后是文娱野心
  18. ArTIST:Probabilistic Tracklet Scoring and Inpainting for Multiple Object Tracking
  19. kernel 启动过程之三, start_kernel()函数 概叙!init/main.c
  20. JSR296 为 annotation processing 安装 Eclipse : m2e-apt 插件

热门文章

  1. Button的使用(十三):设置可见性
  2. lodop+art-template实现web端漂亮的小票样式打印
  3. SmartSVN11 Mac版 注册码序列号
  4. 【Python】torrentParser1.00
  5. TabControl控件和TabPage
  6. Webform--LinQ 增、删、改、查
  7. Android JNI编程(六)——C语言函数指针、Unition联合体、枚举、Typedef别名、结构体、结构体指针...
  8. SQL--数据库性能优化详解
  9. mysql中engine=innodb和engine=myisam的区别详解
  10. JSP,Servlet,JavaBean在WEB应用的角色