集合

集合是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迭代器的更多相关文章

  1. List集合和iterator并发异常处理

    一:List接口: 子类:ArrayList   LinkedList 特点:Unlike sets, lists typically allow duplicate elements.不像set集合 ...

  2. 15.Colection集合和Iterator接口.md

    目录 1.Collection 1.1概念 1.1遍历方法-Lambda表达式 1.2遍历方法-Iterator接口 1.3使用Lambda方法遍历Iterator接口 1.4使用Foreach方法遍 ...

  3. java基础33 Set集合下的HashSet集合和TreeSet集合

    单例集合体系: ---------| collection  单例集合的根接口--------------| List  如果实现了list接口的集合类,具备的特点:有序,可重复       注:集合 ...

  4. Scala集合和Java集合对应转换关系

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...

  5. Java集合的实现细节—Set集合和Map集合

    Set:代表无序.不可重复的集合 Map:代表key-value对集合,也称为关联数组 从表面上看,Set和Map相似性很少,但实际上可以说Map集合时Set集合的扩展. 1.Set集合和Map集合的 ...

  6. 【读书笔记】【深入理解ES6】#7-Set集合和Map集合

    ES6新标准中将Set集合和Map集合添加到JS中. ES5中Set集合和Map集合 在ES5中,开发者们用对象属性来模拟这两种集合. var set = Object.create(null); s ...

  7. 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq

    5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 —— 第一天 认识Parallel 5天玩转C#并行和多线程编程 —— 第二天 并行集合和PLinq 5天玩转C#并行和多线程编 ...

  8. ES6笔记(6)-- Set、Map结构和Iterator迭代器

    系列文章 -- ES6笔记系列 搞ES6的人也是够无聊,把JS弄得越来越像Java.C++,连Iterator迭代器.Set集合.Map结构都出来了,不知道说什么好... 一.简单使用 1. iter ...

  9. vector容器+iterator迭代器

    关于vector容器的详细描述,可参考:http://www.jb51.net/article/41648.htm   关于iterator迭代器的描述,可参考http://www.cppblog.c ...

随机推荐

  1. max depth exceeded when dereferencing c0-param0问题的解决

    在做项目的时候,用到了dwr,有一次居然报错,错误是 max depth exceeded when dereferencing c0-param0 上网查了一下,我居然传参数的时候传的是object ...

  2. steam夏日促销悄然开始,用Python爬取排行榜上的游戏打折信息

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 不知不觉,一年一度如火如荼的steam夏日促销悄然开始了.每年通过大大小小 ...

  3. Web开发HTTP协议知识_常用http方法、http状态码等(前端开发和面试必备))

    http请求由三部分组成,分别是:请求行.消息报头.请求正文. HTTP(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连 ...

  4. C# 跨平台UI 技术

    构建跨平台应用程序的的几种UI技术,以C# 或者其他基于.NET的 语言(诸如:Visual Basic[VB]).本文研究了三种跨平台技术,并讨论了在哪些情况下开发人员可以使用这些技术.本文使你对可 ...

  5. python学习笔记之文件操作(三)

    这篇博客小波主要介绍一下python对文件的操作 对文件的操作主要分为三步: 1.打开文件获取文件的句柄,句柄也是文件描述符 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件,是小波随写的周杰伦 ...

  6. Django---进阶5

    目录 单表操作 必知必会13条 测试脚本 查看内部sql语句的方式 神奇的双下划线查询 一对多外键增删改查 多对多外键增删改查 正反向的概念 多表查询 子查询(基于对象的跨表查询) 联表查询(基于双下 ...

  7. 还能这么玩?用VsCode画类图、流程图、时序图、状态图...不要太爽!

    文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 软件设计中,有好几种图需要画,比如流程图.类图.组件图等,我知道大部分 ...

  8. 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 ...

  9. CCNA-Part5 - 传输层 ,TCP 为什么是三次握手?

    传输层 传输层主要的作用就是建立端到端的连接.比如电脑的微信的通信,就需要跨越多个网络设备(交换机和录取)再和微信的服务器建立连接. 传输层需要具有以下的特点: 会话的多复用:如电脑上开启的多个应用, ...

  10. ScheduledThreadPoolExecutor源码主要部分解析

    ScheduledThreadPoolExecutor继承与基础线程池类ThreadPoolExecutor并实现ScheduledExecutorService接口. 其中ScheduledExec ...