Java集合入门
内容:
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集合入门的更多相关文章
- Java 集合系列之二:List基本操作
1. Java List 1. Java List重要观点 Java List接口是Java Collections Framework的成员. List允许您添加重复元素. List允许您拥有'nu ...
- Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法
Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...
- Java集合框架入门介绍(一)
Java工具包(java.util)提供了强大的数据结构,主要有以下几种接口或类 枚举Enumeration 接口 从数据集合中取回一系列连续值的方法 位集合 BitSet 可以单独清楚或设置的位和标 ...
- Java入门系列(七)Java 集合框架(JCF, Java Collections Framework)
Java 集合概述 List.Set.Map可以看做集合的三大类 java集合就像一个容器,可以将多个对象的引用丢进该容器中. Collection和Map是java集合的根接口. List List ...
- 自学 Java 怎么入门
自学 Java 怎么入门? 595赞同反对,不会显示你的姓名 给你推荐一个写得非常用心的Java基础教程:java-basic | 天码营 这个教程将Java的入门基础知识贯穿在一个实例中,逐 ...
- 完成《Java编程入门》初稿
Java编程入门 现在的运维工程师不但要懂得集合网络.系统管理而且要和开发人员一起调试系统,社会上也需要"复合性"的运维人员,所以需要做运维的也要懂一些开发,知道软件系统接口的调试 ...
- Java最重要的21个技术点和知识点之JAVA集合框架、异常类、IO
(三)Java最重要的21个技术点和知识点之JAVA集合框架.异常类.IO 写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享 ...
- java加密算法入门(三)-非对称加密详解
1.简单介绍 这几天一直在看非对称的加密,相比之前的两篇内容,这次看了两倍多的时间还云里雾里的,所以这篇文章相对之前的两篇,概念性的东西多了些,另外是代码的每一步我都做了介绍,方便自己以后翻阅,也方便 ...
- Java基础入门知识
Java编程入门知识 知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...
随机推荐
- 内网渗透中SSh的巧用
后续应该会做个实例 转自:http://www.myhack58.com/Article/html/3/8/2009/25156.htm 经常遇到如下情形,内部网络主机通过路由器或者安全设备做了访问控 ...
- hbase基于solr配置二级索引
一.概述 Hbase适用于大表的存储,通过单一的RowKey查询虽然能快速查询,但是对于复杂查询,尤其分页.查询总数等,实现方案浪费计算资源,所以可以针对hbase数据创建二级索引(Hbase Sec ...
- dbt 包依赖简单测试
dbt 包含一个自己的包管理,可以使用git 等工具,还是很方便的,可以方便的进行代码共享,实现复用 创建简单包 实际上就是一个简单的dbt 项目,参考项目 https://gitlab.com/da ...
- kettle的资源库
在kettle中的转换或者作业等资源的存储的仓库称为资源库:分为文件资源库.数据库资源库. 一个转换或者作业可以属于某个资源库或者一个单独的文件形态存在. 一.数据库资源库 1.1在mysql中创建一 ...
- STORJ 有实际应用
STORJ 有实际应用,Filezilla 支持 STORJ 的分布式协议.
- php常量PHP_EOL
换行符 unix系列用 \n windows系列用 \r\n mac用 \r PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性 如: <?php echo PHP_EOL; // ...
- MapReduce – 基本思路之推荐引擎
理解MapReduce关键两个步骤: 首先是构想出结构的数据结构,这种数据结构可以支撑你的业务分析使用:是要理解这种模式的处理元素. 第二步,分析原始数据的结构是怎样的: 第三步,基于原始数据结构以及 ...
- thinkPHP5 引入模板
有三种方法:第一种: 直接使用 return view(); 助手函数第二种: use think\View; class Admin extends View 见下第三种: use think\Co ...
- Vue基础汇总实践
1)双向绑定: <div id="app"> <p>{{message}}</p> <input v-model=" ...
- 学hadoop需要什么基础
最近一段时间一直在接触关于hadoop方面的内容,从刚接触时的一片空白,到现在也能够说清楚一些问题.这中间到底经历过什么只怕也就是只有经过的人才会体会到吧.前几天看到有个人问“学hadoop需要什么基 ...