集合和Iterator迭代器
集合
集合是java中提供的一种容器,可以用来存储多个数据。
注意:
①、集合只能存放对象。比如你存一个 int 型数据 1放入集合中,
其实它是自动转换成 Integer 类后存入的,Java中每一种基本类型都有对应的引用类型。
②、集合存放的是多个对象的引用,对象本身还是放在堆内存中。
③、集合可以存放不同类型,不限数量的数据类型。
用ArrayList集合存储int类型数组:

1 public static void main(String[] args) {
2
3 ArrayList<Integer> arr=new ArrayList<Integer>();
4 arr.add(1);
5 arr.add(12);
6 arr.add(2);
7 for(int i=0;i<arr.size();i++){
8 System.out.print(arr.get(i)+" ");
9 }
10 }

ArrayList集合存储5个Person类型元素:

1 ArrayList<Person> arr=new ArrayList<Person>();
2 arr.add(new Person("小猪佩奇",18));
3 arr.add(new Person("乔治",17));
4 arr.add(new Person("熊大",16));
5 arr.add(new Person("熊二",15));
6 for(int i=0;i<arr.size();i++){
7 System.out.println(arr.get(i));
8 }

集合的继承实现关系
查看ArrayList类发现它继承了抽象类AbstractList同时实现接口List,而List接口又继承了Collection接口。
Collection接口为最顶层集合接口了。

Collection接口概述:
Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用,不过Collection接口定义了一些通用的方法,
通过这些方法可以实现对集合的基本操作,因为List接口和Set接口继承自Collection接口,
所以这些方法对List集合和Set集合是通用的。
Collection接口的基本方法:

创建集合的格式:
1 方式1:Collection<元素类型> 变量名 = new ArrayList<元素类型>();
2 方式2:Collection 变量名 = new ArrayList();
方式1创建的集合,只能存储<>中指定的元素类型,该方式为常用方式
方式2创建的集合,集合的元素类型默认为Object类型,即任何类型的元素都可以存储。
代码展示:

1 public static void main(String[] args) {
2 Collection<String> con=new ArrayList<String>();
3 con.add("粉猪佩奇");
4 con.add("巴啦啦小魔仙");
5 con.add("全身变");
6 con.add("乌卡拉");
7 con.add("变身");
8 boolean flag=con.contains("巴啦啦大魔仙");
9 System.out.println(flag);
10 con.remove("变身");
11 //con.clear();
12 con.toArray();
13 for(int i=0;i<con.size();i++){
14 ArrayList<String> arr=(ArrayList<String>)con;
15 System.out.println(arr.get(i));
16 }
17 }

Iterator迭代器
一、Iterator迭代器概述
java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。我们要取出这些集合中的元素,可通过一种通用的获取方式来完成。
Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,
如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
Iterator接口的常用方法:

代码展示:

1 public static void main(String[] args) {
2 ArrayList<Integer> arr=new ArrayList<Integer>();
3 arr.add(1);
4 arr.add(12);
5 arr.add(2);
6 //1.获取Iterator对象
7 //Iterator<Integer> it=arr.iterator();
8 //while循环取出元素
9 /*while(it.hasNext()){
10 System.out.println(it.next());
11 }*/
12 //for循环迭代
13 for(Iterator<Integer> it=arr.iterator();it.hasNext();){
14 System.out.println(it.next());
15 }
16 /*//2.判断集合下一位是否有元素
17 boolean flag=it.hasNext();
18 System.out.println(flag);
19 //3.获取元素
20 System.out.println(it.next());*/
21
22 }

图解:

Iterator迭代方式的代码体现:


1 //1,创建集合对象。
2 Collection<String> coll = new ArrayList<String>();
3 coll.add("abc1");
4 coll.add("abc2");
5 coll.add("abc3");
6 coll.add("abc4");
7
8 //2.获取容器的迭代器对象。通过iterator方法。
9 Iterator it = coll.iterator();
10
11 //3,使用具体的迭代器对象获取集合中的元素。参阅迭代器的方法
12 while(it.hasNext()){
13 System.out.println(it.next());
14 }
15
16 /*
17 迭代器for循环的形式的使用
18 for (Iterator it = coll.iterator(); it.hasNext(); ) {
19 System.out.println(it.next());
20 }

集合元素的向下转型

1 public static void main(String[] args) {
2 Collection<String> con=new ArrayList<String>();
3 con.add("粉猪佩奇");
4 con.add("巴啦啦小魔仙");
5 con.add("全身变");
6 con.add("乌卡拉");
7 con.add("变身");
8 Iterator<String> it=con.iterator();
9 while(it.hasNext()){
10 Object obj=it.next();
11 String str=(String)obj;//如果不加泛型 需要向下转型
12 System.out.println(str.length());
13 }
14 }

增强for循环
格式:
for(元素的数据类型 变量 : Collection集合or数组){}

1 public static void main(String[] args) {
2 ArrayList<Integer> arr=new ArrayList<Integer>();
3 arr.add(1);
4 arr.add(12);
5 arr.add(2);
6 //普通for
7 for(int i=0;i<arr.size();i++){
8 arr.get(i);
9 }
10 //增强for(底层就是迭代器的原理)
11 //for(集合存储类型 变量: 你要遍历的集合名){
12 //System.out.println(变量);
13 //}
14 for(Integer i:arr){
15 System.out.println(i);
16 }
17 }

练习:
定义方法frequency统计集合中指定元素出现的次数,如"a" 3,"b" 2,"c" 1
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; public class text {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("a");
list.add("a");
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("d");
list.add("d");
list.add("d");
list.add("d");
list.add("d");
System.out.println(frequency(list, "a"));
System.out.println(frequency(list, "b"));
System.out.println(frequency(list, "c"));
System.out.println(frequency(list, "d"));
System.out.println(frequency(list, "xxx"));
}
public static int frequency(List<String> arr,String a){
int num=0;
Iterator<String> it=arr.iterator();
while(it.hasNext()){
if(it.next()==a){
num+=1;
}
}
return num;
}
}
2.某中学有若干学生(学生对象放在一个List中),每个学生有一个姓名属性(String)、班级名称属性(String)和考试成绩属性(double)
某次考试结束后,每个学生都获得了一个考试成绩。遍历list集合,并把学生对象的属性打印出来。
public class person {
private String name;
private String class_name;
private double score;
public person(String name, String class_name, double score) {
super();
this.name = name;
this.class_name = class_name;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClass_name() {
return class_name;
}
public void setClass_name(String class_name) {
this.class_name = class_name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
//重写toString
public String toString() {
return "姓名:" + name + "\t班级:" + class_name + "\t成绩:" + score;
}
}
import java.util.ArrayList;
public class student {
public static void main(String[] args) {
person p1=new person("劳拉","java01",100);
person p2=new person("萨曼莎","java02",90);
person p3=new person("约拿","java03",80);
ArrayList<person> stu=new ArrayList<person>();
stu.add(p1);
stu.add(p2);
stu.add(p3);
//循环打印
for(person i:stu){
System.out.println(i);
}
}
}
集合和Iterator迭代器的更多相关文章
- List集合和iterator并发异常处理
一:List接口: 子类:ArrayList LinkedList 特点:Unlike sets, lists typically allow duplicate elements.不像set集合 ...
- 15.Colection集合和Iterator接口.md
目录 1.Collection 1.1概念 1.1遍历方法-Lambda表达式 1.2遍历方法-Iterator接口 1.3使用Lambda方法遍历Iterator接口 1.4使用Foreach方法遍 ...
- java基础33 Set集合下的HashSet集合和TreeSet集合
单例集合体系: ---------| collection 单例集合的根接口--------------| List 如果实现了list接口的集合类,具备的特点:有序,可重复 注:集合 ...
- Scala集合和Java集合对应转换关系
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...
- Java集合的实现细节—Set集合和Map集合
Set:代表无序.不可重复的集合 Map:代表key-value对集合,也称为关联数组 从表面上看,Set和Map相似性很少,但实际上可以说Map集合时Set集合的扩展. 1.Set集合和Map集合的 ...
- 【读书笔记】【深入理解ES6】#7-Set集合和Map集合
ES6新标准中将Set集合和Map集合添加到JS中. ES5中Set集合和Map集合 在ES5中,开发者们用对象属性来模拟这两种集合. var set = Object.create(null); s ...
- 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq
5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 —— 第一天 认识Parallel 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq 5天玩转C#并行和多线程编 ...
- ES6笔记(6)-- Set、Map结构和Iterator迭代器
系列文章 -- ES6笔记系列 搞ES6的人也是够无聊,把JS弄得越来越像Java.C++,连Iterator迭代器.Set集合.Map结构都出来了,不知道说什么好... 一.简单使用 1. iter ...
- vector容器+iterator迭代器
关于vector容器的详细描述,可参考:http://www.jb51.net/article/41648.htm 关于iterator迭代器的描述,可参考http://www.cppblog.c ...
随机推荐
- max depth exceeded when dereferencing c0-param0问题的解决
在做项目的时候,用到了dwr,有一次居然报错,错误是 max depth exceeded when dereferencing c0-param0 上网查了一下,我居然传参数的时候传的是object ...
- steam夏日促销悄然开始,用Python爬取排行榜上的游戏打折信息
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 不知不觉,一年一度如火如荼的steam夏日促销悄然开始了.每年通过大大小小 ...
- Web开发HTTP协议知识_常用http方法、http状态码等(前端开发和面试必备))
http请求由三部分组成,分别是:请求行.消息报头.请求正文. HTTP(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连 ...
- C# 跨平台UI 技术
构建跨平台应用程序的的几种UI技术,以C# 或者其他基于.NET的 语言(诸如:Visual Basic[VB]).本文研究了三种跨平台技术,并讨论了在哪些情况下开发人员可以使用这些技术.本文使你对可 ...
- python学习笔记之文件操作(三)
这篇博客小波主要介绍一下python对文件的操作 对文件的操作主要分为三步: 1.打开文件获取文件的句柄,句柄也是文件描述符 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件,是小波随写的周杰伦 ...
- Django---进阶5
目录 单表操作 必知必会13条 测试脚本 查看内部sql语句的方式 神奇的双下划线查询 一对多外键增删改查 多对多外键增删改查 正反向的概念 多表查询 子查询(基于对象的跨表查询) 联表查询(基于双下 ...
- 还能这么玩?用VsCode画类图、流程图、时序图、状态图...不要太爽!
文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 软件设计中,有好几种图需要画,比如流程图.类图.组件图等,我知道大部分 ...
- Edit Static Web File Http Header Metadata of AWS S3 from SDK | SDK编程方式编辑储存在AWS S3中Web类文件的Http Header元数据
1.Motivation | 起因 A requirement from the product department requires download image from AWS S3 buck ...
- CCNA-Part5 - 传输层 ,TCP 为什么是三次握手?
传输层 传输层主要的作用就是建立端到端的连接.比如电脑的微信的通信,就需要跨越多个网络设备(交换机和录取)再和微信的服务器建立连接. 传输层需要具有以下的特点: 会话的多复用:如电脑上开启的多个应用, ...
- ScheduledThreadPoolExecutor源码主要部分解析
ScheduledThreadPoolExecutor继承与基础线程池类ThreadPoolExecutor并实现ScheduledExecutorService接口. 其中ScheduledExec ...