内容:

1、认识集合

2、Iterator迭代器

1、认识集合

(1)什么是集合

前面的学习,我们知道数据多了,使用数组存放。而且数组中存放的都是基本类型的数据,并且数组是定长的。

当在程序中创建的对象比较多的时候,需要对这些对象进行统一的管理和操作,那么首先我们就需要把这些对象

存储起来。使用数组是可以存放对象的,我们可以定义对象数组来存放,但是数组这个容器存放对象,要对其中的

对象进行更复杂操作时,数据就显的很麻烦。那怎么办呢?

Java中给我们提供了另外一类容器,专门用来存放对象,这个容器就是我们要学习的集合。

(2)集合和数组的区别

  • 数组的长度是固定的。集合的长度是可变的
  • 数组中存储的是同一类型的元素,可以存储基本数据类型值
  • 集合存储的都是对象。而且对象的类型可以不一致

(3)集合框架的由来

集合本身是一个工具,它存放在java.util包中。

JDK最早的1.0版本中。提供的集合容器很少。升级到1.2版,为了更多的需求,出现了集合框架。

有了更多的容器(为什么提供那么多集合容器呢?)。可以完成不同的需求。

这些容器怎么区分?区分的方式:每一个容器的数据结构(数据存储一种方式)不一样。

例如:水缸和衣柜,饮料瓶等等.

不同的容器进行不断的向上抽取,最后形成了一个集合框架,这个框架就是Collection接口(一会可以看一下API)。

在Collection接口定义着集合框架中最最最共性的内容。

在学习时:我们需要看最顶层怎么用, 创建底层对象即可。因为底层继承了父类中的所有功能

(4)集合接口的描述

Collection接口的基本方法:

使用如下:

 public class CollectionDemo {
public static void main(String[] args) {
Collection<String> cc = new ArrayList<String>();
cc.add("abc");
cc.add("123");
cc.add("wyb");
cc.add("666");
System.out.println(cc.contains("wyb"));
cc.remove("wyb");
System.out.println(cc);
cc.clear();
System.out.println(cc);
}
}

2、Iterator迭代器

(1)迭代器概述

java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。我们要取出这些集合中的元素,可通过一种通用的获取方式来完成。

Collection集合元素的通用获取方式:

在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。

一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

(2)迭代器使用

在Collection接口描述了一个抽象方法iterator方法,所有Collection子类都实现了这个方法,并且有自己的迭代形式:

集合中把这种取元素的方式描述在Iterator接口中。Iterator接口的常用方法如下:

  • hasNext()方法:用来判断集合中是否有下一个元素可以迭代。如果返回true,说明可以迭代。
  • next()方法:用来返回迭代的下一个元素,并把指针向后移动一位。
 public class IteratorDemo {
public static void main(String[] args) {
Collection<String> c = new ArrayList<String>();
c.add("1");
c.add("2");
c.add("3");
c.add("4");
c.add("5");
c.add("6");
Iterator<String> it = c.iterator(); // 获取集合的迭代器对象
while(it.hasNext()){ // 反复判断有没有下一个元素
String s = it.next(); // 取出下一个元素
System.out.println(s);
}
}
}

(3)并发修改异常

迭代的常规用法中我们要尽量避免在迭代过程中为集合添加/删除数据。否则会报错,原因是Java抛出了并发修改异常。

迭代过程中并发修改异常的原因为:

迭代器中”记忆”的集合长度与集合中实际长度不同,而导致出现索引与实际元素不符甚至无限循环的情况发生。

所以在使用Iterator时,避免类似操作,for循环底层为迭代器实现,所以也需要避免类似操作。

有些迭代器避免了这样的问题,如ListIterator,但该类并不通用也不常用,实际开发中很少使用,只需要简单了解。

 // java规定: 如果一个集合使用迭代器遍历,那么在遍历的过程中不允许修改集合的长度(增加或删除)
public class ConcurrentModificationExceptionDemo {
public static void main(String[] args) {
Collection<String> c = new ArrayList<String>();
c.add("1");
c.add("2");
c.add("itcast");
c.add("4");
c.add("5");
c.add("6");
Iterator<String> it = c.iterator(); // 获取集合的迭代器对象
while(it.hasNext()){ // 反复判断有没有下一个元素
String s = it.next(); // 取出下一个元素
if("itcast".equals(s)){
// 如果相等添加一个大写ITCAST
c.add("ITCAST"); // 报异常 => ConcurrentModificationException
}
System.out.println(s);
}
}
}

(4)增强for循环

增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,

所以在遍历的过程中,不能对集合中的元素进行增删操作

格式:

for(元素的数据类型  变量 : Collection集合or数组){}

使用如下:

 public class ForeachDemo {
public static void main(String[] args) {
int[] nums = { 1, 2, 3 };
for (int m : nums) {
System.out.println(m);
}
Collection<String> c = new ArrayList<String>();
c.add("a");
c.add("b");
c.add("c");
c.add("d");
for (String n : c) {
System.out.println(n);
}
}
}

Java集合入门的更多相关文章

  1. Java 集合系列之二:List基本操作

    1. Java List 1. Java List重要观点 Java List接口是Java Collections Framework的成员. List允许您添加重复元素. List允许您拥有'nu ...

  2. Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法

    Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...

  3. Java集合框架入门介绍(一)

    Java工具包(java.util)提供了强大的数据结构,主要有以下几种接口或类 枚举Enumeration 接口 从数据集合中取回一系列连续值的方法 位集合 BitSet 可以单独清楚或设置的位和标 ...

  4. Java入门系列(七)Java 集合框架(JCF, Java Collections Framework)

    Java 集合概述 List.Set.Map可以看做集合的三大类 java集合就像一个容器,可以将多个对象的引用丢进该容器中. Collection和Map是java集合的根接口. List List ...

  5. 自学 Java 怎么入门

    自学 Java 怎么入门? 595赞同反对,不会显示你的姓名     给你推荐一个写得非常用心的Java基础教程:java-basic | 天码营 这个教程将Java的入门基础知识贯穿在一个实例中,逐 ...

  6. 完成《Java编程入门》初稿

    Java编程入门 现在的运维工程师不但要懂得集合网络.系统管理而且要和开发人员一起调试系统,社会上也需要"复合性"的运维人员,所以需要做运维的也要懂一些开发,知道软件系统接口的调试 ...

  7. Java最重要的21个技术点和知识点之JAVA集合框架、异常类、IO

    (三)Java最重要的21个技术点和知识点之JAVA集合框架.异常类.IO  写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享 ...

  8. java加密算法入门(三)-非对称加密详解

    1.简单介绍 这几天一直在看非对称的加密,相比之前的两篇内容,这次看了两倍多的时间还云里雾里的,所以这篇文章相对之前的两篇,概念性的东西多了些,另外是代码的每一步我都做了介绍,方便自己以后翻阅,也方便 ...

  9. Java基础入门知识

    Java编程入门知识   知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...

随机推荐

  1. Dlib与OpenCV图片转换

    re: 1. https://zhuanlan.zhihu.com/p/36489663 2. https://stackoverflow.com/questions/38180410/convert ...

  2. TF-IDF算法(2)—python实现

    参加完数模之后休息了几天,今天继续看TF-IDF算法.上篇中对TF-IDF算法已经做了详细的介绍,在此不再赘述.今天主要是通过python,结合sklearn库实现该算法,并通过k-means算法实现 ...

  3. PS如何批量处理图片

    喜爱摄影的朋友可能都有这样的体会,相机里面存了大量的图片,一般都是2048×1536或者更大像素的照片,每张都有1M以上,如果设置的清晰度高,则照片就更大,这样的图片是无法上传到博客中的(博客要求每张 ...

  4. Linux配置python和pip环境

    CentOS: 1.首先安装EPEL扩展源: yum install -y epel-release 2.系统自带python2,所以只需安装python3 yum install -y python ...

  5. Java乱码解决之道

    1.常见字符编码 ASCII编码: ASCII,American Standard Code for Information Interchange,是基于拉丁字母的一套电脑编码系统,主要用于显示现代 ...

  6. JS Array.filter()方法

    1.filter()接收的函数可以有多个参数.通常我们只使用第一个参数,第二参数和第三个参数表示元素的位置和数组本身: //去重 var arr = ["1", "2&q ...

  7. Tensorflow & Python3 做神经网络(视频教程)

    Tensorflow 简介 1.1 科普: 人工神经网络 VS 生物神经网络 1.2 什么是神经网络 (Neural Network) 1.3 神经网络 梯度下降 1.4 科普: 神经网络的黑盒不黑 ...

  8. 用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题

    用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题 提示找不到表,我去看了一下,丢失了很多个表: 问题: 直接拷贝data下的数据库数据进行备份 , 发现部分数据表不见了. ...

  9. java中使用MD5加密的算法

    MD5,全名Message Digest Algorithm 5,中文名为消息摘要算法第五版,为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.以下是JAVA语言中使用MD5加密的工具 ...

  10. DBLinq (MySQL exactly) Linq To MySql

    http://blog.csdn.net/feihu_guest/article/details/7346948 DBLinq (MySQL exactly) Linq To MySql http:/ ...