本章目标 掌握集合框架包含的内容 掌握ArrayList和LinkedList的使用 掌握HashMap的使用 掌握Iterator的使用

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
Java标准类库 福州大学阳光学院 张海歆.
项目6 通用堆栈.
第 七 章 java.util包.
Java程序设计教程 第一讲 Java概述.
四資二甲 第三週作業 物件導向程式設計.
面向对象程序设计(Java) 徐志红
南京理工大学 第2章 Java基本语法 本章我们将学习Java编程语言的基本语法,包括变量、操作符、表达式、语句、字符串、数组、控制流以及如何使用帮助文档。 使用下面的编程框架: public class Test{ public static void main(String []args){ //以下添加测试代码.
Google App Engine Google 應用服務引擎.
第三章 控制结构.
第九章 字符串.
程式設計實作.
C#程序设计 c# programming 泛型 C#程序设计课程组.
Hadoop I/O By ShiChaojie.
第8章 列舉器與集合 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
程序與函數的類別方法 目的:模組化程式設計 方法:由上而下設計 注意事項:(1)獨立性 (2)結合問題 (3)子問題間的溝通.
2018/11/22 Java语言程序设计-程序流程 教师:段鹏飞.
Ch13 集合與泛型 物件導向程式設計(2).
2018/11/27 Java语言程序设计-程序流程 教师:段鹏飞.
厦门大学数据库实验室 MapReduce 连接
JAVA程序设计 第5章 深入理解JAVA语言----补充.
程式設計實作.
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
Java语言程序设计 第五部分 Java异常处理.
Java程序设计 第9章 继承和多态.
王豐緒 銘傳大學資訊工程學系 問題:JAVA 物件檔輸出入.
辅导课程六.
C#面向对象程序设计 $7 继承和多态性.
Java集合类.
第 六 章 鏈結串列(Link List) 課程名稱:資料結構 授課老師:________ 2019/1/2.
集合框架和泛型(一).
3.7 Java的工具类.
C/C++/Java 哪些值不是头等程序对象
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
4.2通讯服务模块线程之间传递信息 信息工程系 向模军 Tel: QQ:
Java集合.
从zval看PHP变量
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第二章Java基本程序设计.
第二章 Java基本语法 讲师:复凡.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
第五章 介面/集合/泛型 注意: 本投影片僅供本書上課教師使用,非經同意請勿上網轉載或供拷貝.
顺序表的删除.
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
第二章 Java基本语法 讲师:复凡.
VB与Access数据库的连接.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java基本语法 讲师:复凡.
3.16 枚举算法及其程序实现 ——数组的作用.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
龍老師我不會Debug QQ.
第二章 Java基本语法 讲师:复凡.
第4章 数组与字符串 学习目标 本章要点 上机练习 习 题.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
基于列存储的RDF数据管理 朱敏
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
JAVA 程式設計與資料結構 第三章 物件的設計.
迴圈(重複性結構) for while do while.
判斷(選擇性敘述) if if else else if 條件運算子.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第二章 Java基础语法 北京传智播客教育
6 集合类与泛型.
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

本章目标 掌握集合框架包含的内容 掌握ArrayList和LinkedList的使用 掌握HashMap的使用 掌握Iterator的使用 掌握泛型集合的使用

为什么使用集合框架 存储一个班学员信息,假定一个班容纳20名学员 如何存储每天的新闻信息? 学员1 学员20 一维数组 每天的新闻总数不确定,太少浪费空间,太多空间不足 如何存储每天的新闻信息? 新闻1 …… 新闻N 如何存储ACCP课程的代码与课程信息,能够通过代码方便地获得课程信息? 代码1 …… 代码N 一一对应 课程1 …… 课程N 如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象——可以使用Java集合框架

Java集合框架包含的内容2-1 接口 1 具体类 2 3 算法 Collection Map List Set ArrayList LinkedList HashSet TreeSet HashMap TreeMap 具体类 2 提供了对集合进行排序、 遍历等多种算法实现 算法 Collections 3 Java集合框架为我们提供了一套性能优良、使用方便的接口和类,它们位于java.util包中 我们不必再重新发明轮子,只需学会如何使用它们,就可处理实际应用中问题

Java集合框架包含的内容2-2 Collection 接口存储一组不唯一,无序的对象 List 接口存储一组不唯一,有序(插入顺序)的对象 Set Collection 接口存储一组不唯一,无序的对象 List 接口存储一组不唯一,有序(插入顺序)的对象 Set 接口存储一组唯一,无序的对象 Map接口存储一组键值对象,提供key到value的映射 Map 4

List接口的实现类 ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高 LinkedList ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高 LinkedList采用链表存储方式。插入、删除元素时效率比较高

ArrayList集合类5-1 存储多条狗狗信息,获取狗狗总数,逐条打印出各条狗狗信息 通过List接口的实现类ArrayList实现该需求 元素个数不确定 要求获得元素的实际个数 按照存储顺序获取并打印元素信息

ArrayList集合类5-2 public class Test1 { public static void main(String[] args) { Dog ououDog = new Dog("欧欧", "雪娜瑞"); Dog yayaDog = new Dog("亚亚", "拉布拉多"); Dog meimeiDog = new Dog("美美", "雪娜瑞"); Dog feifeiDog = new Dog("菲菲", "拉布拉多"); List dogs = new ArrayList(); dogs.add(ououDog); dogs.add(yayaDog); dogs.add(meimeiDog); dogs.add(2, feifeiDog); // 添加feifeiDog到指定位置 System.out.println("共计有" + dogs.size() + "条狗狗。"); System.out.println("分别是:"); for (int i = 0; i < dogs.size(); i++) { Dog dog = (Dog) dogs.get(i); System.out.println(dog.getName() + "\t"+ dog.getStrain()); } 创建ArrayList对象并把四个狗狗对象放入其中 输出狗狗的数量 获取第i个元素 演示示例:使用ArrayList集合类

ArrayList集合类5-3 扩充以下几部分功能 List接口提供相应方法remove()、contains(),直接使用即可 删除指定位置的狗狗,如第一个狗狗 删除指定的狗狗,如删除feifeiDog对象 判断集合中是否包含指定狗狗 List接口提供相应方法remove()、contains(),直接使用即可

ArrayList集合类5-4 public class Test2 { public static void main(String[] args) { // 1、创建多个狗狗对象 … // 2、创建ArrayList集合对象并把多个狗狗对象放入其中 System.out.println("删除之前共计有" +dogs.size() + "条狗狗。"); dogs.remove(0); dogs.remove(feifeiDog); System.out.println("\n删除之后还有" + dogs.size() + "条狗狗。"); if(dogs.contains(meimeiDog)) System.out.println("\n集合中包含美美的信息"); else System.out.println("\n集合中不包含美美的信息"); } 删除第一个狗狗和feifeiDog 判断是否包含指定狗狗 演示示例:使用ArrayList集合类

ArrayList集合类5-5 List接口常用方法 方法名 说 明 boolean add(Object o) 说 明 boolean add(Object o) 在列表的末尾顺序添加元素,起始索引位置从0开始 void add(int index,Object o) 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间 int size() 返回列表中的元素个数 Object get(int index) 返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换 boolean contains(Object o) 判断列表中是否存在指定元素 boolean remove(Object o) 从列表中删除元素 Object remove(int index) 从列表中删除指定位置元素,起始索引位置从0开始

练习——添加多个企鹅信息到List中 需求说明: 把多个企鹅的信息添加到集合中 查看企鹅的数量 遍历所有企鹅的信息 删除集合中部分企鹅的元素 判断集合中是否包含指定企鹅 完成时间:20分钟

共性问题集中讲解 共性问题集中讲解 常见调试问题及解决办法 代码规范问题

LinkedList集合类3-1 在集合任何位置(头部、中间、尾部)添加、获取、删除狗狗对象

演示示例:使用LinkedList集合类 public class Test3 { public static void main(String[] args) { … // 创建多个狗狗对象 LinkedList dogs = new LinkedList(); dogs.add(ououDog); dogs.add(yayaDog); dogs.addLast(meimeiDog); dogs.addFirst(feifeiDog); Dog dogFirst= (Dog)dogs.getFirst(); System.out.println("第一条狗狗昵称是"+dogFirst.getName() ); Dog dogLast= (Dog)dogs.getLast(); System.out.println("最后一条狗狗昵称是"+dogLast.getName()); dogs.removeFirst(); dogs.removeLast(); … } 创建LinkedList集合对象并把多个狗狗对象放入其中 获取第一条狗狗信息 获取最后一条狗狗信息 删除第一个狗狗和最后一个狗狗 演示示例:使用LinkedList集合类

LinkedList集合类3-3 LinkedList的特殊方法 方法名 说 明 void addFirst(Object o) 说 明 void addFirst(Object o) 在列表的首部添加元素 void addLast(Object o) 在列表的末尾添加元素 Object getFirst() 返回列表中的第一个元素 Object getLast() 返回列表中的最后一个元素 Object removeFirst() 删除并返回列表中的第一个元素 Object removeLast() 删除并返回列表中的最后一个元素

小结 集合框架有何好处? Java集合框架中包含哪些接口和哪些类? ArrayList和LinkedList有何异同?

Map接口3-1 建立国家英文简称和中文全名间的键值映射,并通过key对value进行操作,应该如何实现数据的存储和操作呢? 最常用的实现类是HashMap

Map接口3-2 public class Test4 { public static void main(String[] args) { Map countries = new HashMap(); countries.put("CN", "中华人民共和国"); countries.put("RU", "俄罗斯联邦"); countries.put("FR", "法兰西共和国"); countries.put("US", "美利坚合众国"); String country = (String) countries.get("CN"); System.out.println("CN对应的国家是:" + country); System.out.println("Map中共有"+countries.size()+"组数据"); countries.remove("FR"); System.out.println("Map中包含FR的key吗?" + countries.containsKey("FR")); System.out.println( countries.keySet() ) ; System.out.println( countries.values() ); System.out.println( countries ); } 使用HashMap存储多组键值对 获取指定元素的值 获取Map元素个数 删除指定元素,判断是否包含指定元素 显示键集、值集和键值对集 演示示例:使用HashMap集合类

Map接口3-3 Map接口常用方法 方法名 说 明 Object put(Object key, Object val) 说 明 Object put(Object key, Object val) 以“键-值对”的方式进行存储 Object get (Object key) 根据键返回相关联的值,如果不存在指定的键,返回null Object remove (Object key) 删除由指定的键映射的“键-值对” int size() 返回元素个数 Set keySet () 返回键的集合 Collection values () 返回值的集合 boolean containsKey (Object key) 如果存在由指定的键映射的“键-值对”,返回true

集合类对比 Vector和ArrayList的异同 Hashtable和HashMap的异同 实现原理相同,功能相同,很多情况下可以互用 两者的主要区别如下 Vector线程安全,ArrayList重速度轻安全,线程非安全 长度需增长时,Vector默认增长一倍,ArrayList增长50% Hashtable和HashMap的异同 实现原理相同,功能相同,在很多情况下可以互用 Hashtable继承Dictionary类,HashMap实现Map接口 Hashtable线程安全,HashMap线程非安全 Hashtable不允许null值,HashMap允许null值 开发过程中,最好使用ArrayList和HashMap

练习——根据宠物昵称查找宠物 需求说明: 根据宠物昵称查找对应宠物,如果找到,显示宠物信息,否则给出错误提示 完成时间:15分钟

共性问题集中讲解 共性问题集中讲解 常见调试问题及解决办法 代码规范问题

迭代器Iterator2-1 如何遍历List集合呢? 方法1:通过for循环和get()方法配合实现遍历 Collection 接口的iterate()方法返回一个Iterator,然后通过Iterator接口的两个方法可实现遍历 boolean hasNext(): 判断是否存在另一个可访问的元素 Object next(): 返回要访问的下一个元素

迭代器Iterator2-2 public class Test5 { public static void main(String[] args) { // 1、创建多个狗狗对象 Dog ououDog = new Dog("欧欧", "雪娜瑞"); … // 2、创建ArrayList集合对象并把多个狗狗对象放入其中 List dogs = new ArrayList (); dogs.add(ououDog); System.out.println("使用Iterator遍历,所有狗狗昵称和品种是:"); Iterator it = dogs.iterator(); while (it.hasNext()) { Dog dog = (Dog) it.next(); System.out.println(dog.getName()+"\t"+dog.getStrain()); } 通过迭代器依次输出所有狗狗的信息 演示示例:使用Iterator遍历集合

练习——迭代List中企鹅信息 需求说明: 使用ArrayList和LinkedList存储多个企鹅信息,然后统一使用Iterator进行遍历 完成时间:15分钟

共性问题集中讲解 共性问题集中讲解 常见调试问题及解决办法 代码规范问题

泛型集合3-1 把任何类型对象通过add(Object obj) 放入List中,认为只是Object类型 通过get(int index) 取出List中元素时必须进行强制类型转换,繁琐而且容易出现异常 使用Map的put(Object key, Object value)和get (Object key)存取对象时存在同样问题 使用Iterator的next()方法获取元素时存在同样问题 JDK5.0中通过引入泛型有效的解决了这个问题 JDK5.0使用泛型改写了集合框架中的所有接口和类

泛型集合3-2 public class Test6 { public static void main(String[] args) { // 1、创建多个狗狗对象 Dog dog1 = new Dog("欧欧", "雪娜瑞"); … // 2、创建ArrayList集合对象并把多个狗狗对象放入其中 List <Dog> dogs = new ArrayList<Dog>(); dogs.add(dog1); //dogs.add("hello"); // 3、 显示第三个元素的信息 Dog dog = dogs.get(2); System.out.println("第三个狗狗的信息如下:"); System.out.println(dog.getName() + "\t" + dog.getStrain()); //4、使用Iterator遍历dogs对象 System.out.println("\n所有狗狗的信息如下:"); Iterator <Dog> it = dogs.iterator(); while (it.hasNext()) { dog = it.next(); } 标记元素类型 标记元素类型 类型不符,出现编译错误 无需类型强制转换 (Dog) Dogs.get(2); 标记元素类型 无需类型强制转换 (Dog) it.next(); 演示示例:使用泛型集合

泛型集合3-3 public class Test7 { public static void main(String[] args) { //1、使用HashMap存储多组国家英文简称和中文全称的键值对 Map <String,String> countries=new HashMap<String,String>(); countries.put("CN", "中华人民共和国"); countries.put("RU", "俄罗斯联邦"); countries.put("FR", "法兰西共和国"); //2、显示"CN"对应国家的中文全称 String country= countries.get("CN"); System.out.println("CN对应的国家是:"+country); } 标记键-值类型 标记键-值类型 无需类型强制转换 (String) countries.get("CN"); 演示示例:使用泛型集合

总结 Collection 、List 、Set 、Map接口的联系和区别有哪些? ArrayList和LinkedList有什么异同之处? 有哪些遍历集合的方法? 为什么要引入泛型集合?