集合

集合是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         //普通for7         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;}//重写toStringpublic 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);}}
}

转载于:https://www.cnblogs.com/Ace-suiyuan008/p/9415112.html

集合和Iterator迭代器相关推荐

  1. Day_8/08(List集合和Set集合)

    目录 一.List集合 1.ArrayList集合 2.LinkedList集合 1.增加元素 2.查询元素 3.修改元素 4.删除元素 二.Set集合 1.HashSet集合 2.LinkedHas ...

  2. Java基础知识(二)(Object类的常用方法、日期时间类、System类、StringBuilder类、包装类、Collection集合、Iterator迭代器、泛型、list集Set接口...)

    文章目录 Java基础知识(二) 1.Object类的常用方法 1.1 toString方法 1.2 equals方法 1.3 Objects类 2.日期时间类 2.1 Date类 2.2 DateF ...

  3. android list 替换元素_Java 集合(二)——Set 集合、List 集合和 Collections 工具类...

    一.前言 在 Java 集合(一)中我们已经讲了 Collection 集合接口.Iterator 迭代器和泛型,今天我们来讲 Set 集合.List 集合 和 Collections 工具类. 二. ...

  4. 1-17 Set集合和Map集合

    Hash表 Hash,一般翻译做"散列",也有直接音译为"哈希"的,它是基于快速存取的角度设计的,也是一种典型的**"空间换时间"**的做法 ...

  5. 【小白学Java】D20》》》Iterator迭代器 增强for循环

    [友情链接]---–->Java中的各种集合大汇总,学习整理 [友情链接]----–> Collection集合 [友情链接]----–> ArrayList集合及其常用功能 [友情 ...

  6. 2021年大数据常用语言Scala(十九):基础语法学习 iterator迭代器

    目录 iterator迭代器 使用迭代器遍历集合 iterator迭代器 scala针对每一类集合都提供了一个迭代器(iterator)用来迭代访问集合 使用迭代器遍历集合 使用iterator方法可 ...

  7. 设计模式(十五):Iterator迭代器模式 -- 行为型模式

    1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 集合不一定是均一的.图形用 ...

  8. Java核心API -- 7(Iterator迭代器、Comparable、Comparator比较器)

    1. Iterator迭代器 所有Collection的实现类都实现了iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对集合元素迭代的便利.在java.util包下. 1) ...

  9. 使用Iterator迭代器循环集合

    1.Iterator迭代器用于遍历集合元素,获取迭代器可以使用. 2.Iterator提供了统一遍历集合元素的 方式 ,其提供了用于遍历集合的连个方法----- boolean  hasNext()判 ...

  10. vector容器与iterator迭代器

    vector容器 vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库负责管理存储元素的相关内存.我们把vector称为容器,是因为它可以包含其他对象 ...

最新文章

  1. linux Shell学习笔记第五天
  2. 与老黄的技术对聊总结
  3. 关于超级计算机的英语作文,中国研制出世界最强超级计算机
  4. OS_CORE.C(5)
  5. 可以看游资的app_跟随一线游资操作,轻松收获涨停板
  6. 前端js 实现文件下载
  7. Jenkins_安装基础软件_入门试炼03
  8. freecodecamp_如何充分利用freeCodeCamp
  9. (翻译)Importing models-FBX Importer - Animations Tab
  10. 当当图书分类html,基于httpclient与jsoup的抓取当当图书页面数据简单Demo
  11. DosBox 的 DOSBOX.CONF 的详细配置说
  12. GET请求淘宝H5页面获取商品信息
  13. C++作业之模拟打牌:小喵钓鱼
  14. MD5、SHA1、SHA256、SHA512
  15. 关于谷歌webrtc源码国内镜像的使用问题,以及Kurento媒体服务器
  16. 将windows 8安装到U盘随身带!
  17. Android项目开发如何设计整体架构?大牛最佳总结
  18. 华硕rt-n16无线打印服务器,无线打印好拍档 华硕RT-N16赠照片打印机(图)
  19. UITableView性能优化
  20. 王某与石某的分歧卡卡罗特

热门文章

  1. 新浪微博分享 小记!!!(尚未成功)
  2. WCF中常用的binding方式
  3. Notification通知
  4. CentOS 6.2安装配置pacemaker
  5. python2.7安装pyqt4及转换ui文件为py文件
  6. JavaEE——Mybatis(5)--resultMap自定义结果集封装
  7. 单分子荧光原位杂交(smFISH)
  8. Telnet基本概念及C# Telnet 客户端程序
  9. linux网络 (三):网络测试
  10. [转]软件开发的“三重门”