J2SE核心实战开发—— 集合类框架

文档都是基于 实验楼 线上环境制作的,因此文档叙述和截图均与其有关。使用其他实验环境也没有太大影响,知识点的操作是类似的。该系列的课程是在 实验楼 实习所原创的第一个课程,欢迎大家多提意见。

一、实验简介

在Java基础语法中,你可能接触到了数组这一概念。

本章知识点:

  • 集合类框架的概念
  • ArrayList
  • HashMap

二、什么是集合类框架

在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection Framework)。
这意味着我们在具体应用时不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象并加以应用就可以了,从而提高了编程效率。你可以了解更多关于Java集合框架的知识。

Java.util 中的集合类包含 Java 中某些最常用的类。最常用的集合类是 List 和 Map。List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象元素列表。List 适用于按数值索引访问元素的情形。

下图是Java集合框架的结构图,从此处你可以大致了解到各种类型的集合之间的关系。
此处输入图片的描述

三、认识ArrayList

ArrayList就是动态数组,支持自动改变大小,可以灵活的插入和删除元素。你可以进一步了解ArrayList。

ArrayList 定义了一些用于插入和删除元素的方法,了解一下:

  • add(E e),将指定的元素添加到此列表的尾部
  • clear(),移除此列表中的所有元素
  • contains(Object o),如果此列表中包含指定的元素,则返回 true
  • get(int index),返回此列表中指定位置上的元素
  • remove(int index),移除此列表中指定位置上的元素
  • toArray(),按从第一个到最后一个元素的顺序返回包含此列表中所有元素的数组

我们通过下面一个遍历ArrayList的实例来体会其用法,首先请在Eclipse中新建项目ArrayListExp,创建一个包com.shiyanlou.course和类ArrayListTraversal

主要的代码如下,在注释里你可以看到对于各行代码的解说:

package com.shiyanlou.course;import java.util.ArrayList;
import java.util.List;public class ArrayListTraversal {public static void main(String[] args) {List<Integer> list = new ArrayList<Integer>();// 创建列表listfor (int i = 0; i < 10; i++) {list.add(i);// 使用add()方法,通过for循环向list中增加10个元素,每个元素即当前循环的次数值}System.out.println("Items in the list:");System.out.println(list);   // 输出列表中全部的元素System.out.println("Items in the list with odd index:");for (int i = 1; i < list.size(); i += 2) {// 输出列表中序号为奇数的元素,注意 i += 2 的用法System.out.print(list.get(i)+"  ");//使用get()方法从list中取出元素}}
}

编写完成后,点击编译并运行,我们可以在控制台看到下面的输出结果:

此处输入图片的描述

四、认识HashMap

Java 自带了各种 Map 类,这些 Map 类可归为三种类型:

  • 通用 Map(HashMapHashtablePropertiesLinkedHashMapIdentityHashMap等)
  • 专用 Map(java.util.jar.Attributesjavax.print.attribute.standard.PrinterStateReasons等)
  • 一个用于帮助实现您自己的 Map 类的抽象类

其中,通用Map用于在应用程序中管理映射,通常在 java.util 程序包中实现,可以直接使用。

Map 定义了几个用于插入和删除元素的方法,通过这些方法可以更改 Map 中的内容。

  • clear(),从 Map 中删除所有映射
  • remove(Object key),从 Map 中删除键和关联的值
  • put(Object key, Object value),将指定值与指定键相关联
  • clear(),从 Map 中删除所有映射
  • putAll(Map t),将指定 Map 中的所有映射复制到此 map

HashMap是基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。这里的键值对(key - value),你可以进一步了解HashMap。

下面我们使用HashMap及其中的一些方法来做一个简单的电话簿,目标是让用户通过输入待查询的姓名来获取其对应的电话号码。

首先请在Eclipse中新建一个项目PhoneBook,创建包com.shiyanlou.course和类PhoneBookByMap。主要的代码如下:

package com.shiyanlou.course;import java.util.HashMap;
import java.util.Scanner;public class PhoneBookByMap {public static void main(String[] args) {HashMap<String, String> phonebook = new HashMap<String, String>();//创建一个HashMap对象,名称为phonebook,键值对的类型均为StringScanner scan = new Scanner(System.in);//创建扫描器用于获取用户的输入String keyword = new String();//创建一个名为keyword的字符串用于存放用户输入的关键词phonebook = initPhoneBook(phonebook);//利用自写的initPhoneBook方法为电话簿装入数据,完成其初始化的步骤System.out.println("Please input a name that you want to search:");//提示用户输入待查询的姓名keyword = scan.nextLine();//将用户的输入信息装入字符串keyword中if(keyword.isEmpty()){//使用isEmpty()方法判断用户是否真正输入了内容,如没有则提示其输入System.out.println("Please input a name!");}else {//若用户有输入某个关键词,则按照该关键词在phonebook中查找其对应的号码System.out.println("The result is :");System.out.println(queryPhone(phonebook, keyword));//这里调用了自写的queryPhone()方法}}private static HashMap<String, String> initPhoneBook(HashMap<String, String> phonebook){//该方法用于完成指定HashMap的初始化,为其装入一些号码数据,你也可以自定义这些数据//Q:你还清楚形参和实参的区别吗?phonebook.put("Steve", "13012345678");phonebook.put("Bob", "028-80001234");phonebook.put("Peter", "182222233333");//使用put()方法将姓名与电话号码相关联,存放在名为phonebook的HashMap中//put()方法中,第一个参数为关键词key,第二个参数为其对应的值valuereturn phonebook;//返回修改后的phonebook}private static String queryPhone(HashMap<String, String> phonebook, String keyword) {String result = new String();//创建存放结果的字符串resultresult = phonebook.get(keyword);//使用get()方法查询keyword所对应的电话号码,并赋给result//put()方法中,参数为关键词key,返回值为其对应的值value,未找到对应值时,返回值为nullif(result == null)return "Can not find this user.";//如果未找到该用户的电话号码,则将查询结果修改为“未找到该用户”return result;//返回查询结果}}

这个例子稍显复杂,需要你弄清楚其中各个模块之间的关系。检查代码无误后,点击编译并运行,在控制台分别输入无效姓名、有效姓名(例如Steve,注意大小写)和空值,观察下程序返回的结果是否正常。

查找到号码的情况:

此处输入图片的描述

找不到号码的情况:

此处输入图片的描述

以及你什么都不输入,直接回车得到的提示:

此处输入图片的描述

五、实验总结

本章我们学习了Java中的集合类,并动手定义了ArrayList和HashMap,使用了其自带的方法来完成了诸如存取数据的工作。在课程结束之后,你也应该结合API文档,动手再使用一下这些集合类中的其他类型及其方法。

六、作业

请查阅资料,回答下面几个问题:

  1. Collection与Collections的区别?
  2. List、Set和Map是否继承自Collection接口?
  3. ArrayList与Vector的区别?
  4. HashMap与Hashtable的区别?

参考文档

  • Java的集合框架最全详解(图)
  • Java SE官方API文档 - java.util.Collection

转载于:https://www.cnblogs.com/qichuantongxue/p/4701231.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

猫和老鼠java下载安装_tomcat(Java服务器)

Tomcat(Java服务器工具)是一款十分优质的Java服务器软件。在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。对于一个初学者来说&#xff0c;可以这样认为&#xff0c;当在一台机器上配置好Apache 服务器&#xff0c;可利用它响应…

管道通信

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 什么是管道&#xff1f; 管道是单向的、先进先出的&#xff0c;它把一个进程的输出和另…

Linux 终端下 dstat 监控工具

dstat 是一个可以取代vmstat&#xff0c;iostat&#xff0c;netstat和ifstat这些命令的多功能产品。dstat克服了这些命令的局限并增加了一些另外的功能&#xff0c;增加了监控项&#xff0c;也变得更灵活了。dstat可以很方便监控系统运行状况并用于基准测试和排除故障。dstat可…

运用HTML5+CSS3和CSS滤镜做的精美的登录界面

原始出处http://chenjinfei.blog.51cto.com/2965201/774865<!DOCTYPE HTML> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetgb2312"> <meta http-equiv"description" content"运用C…

MyEclipse使用总结——MyEclipse文件查找技巧 ctrl+shift+R ctrl+H

一、查找文件 使用快捷键【ctrlshiftR】弹出弹出文件查找框&#xff0c;如下图所示&#xff1a; 二、查找包含某个字符串的文件 使用快捷键【ctrlH】在弹出对话框中选File Search选项&#xff0c;然后在第一个文本框中粘贴&#xff08;我一般用粘贴&#xff09;或自已手动录入&…

java实现控件绑定数据源_控件(三)——TreeView控件以XmlDataSource控件为数据源实现简单的绑定...

TreeView控件功能非常强大&#xff0c;今天&#xff0c;我们只是窥其一角。我们实现的例子是&#xff1a;TreeView控件与XmlDataSource控件绑定&#xff0c;然后在网页显示选中项。首先我们添加一个xml&#xff0c;取名为tv.xml。在其中写上如下代码&#xff1a;这时我们在defa…

手机屏幕原理和设计(触摸屏幕)

//本文参考了很多百度百科的知识  随着android手机的流行&#xff0c;手机触摸屏成为一个时尚。再购机的时候&#xff0c;就会有很多人去问手机的触屏是电阻式的还是电容式的呢&#xff1f;但是其实很多人应该是不知道个中的原委的。只是一个感觉电容式的一定要比电阻式的好。…

extjs5(05--主界面上加入顶部和底部区域)

这一节为主界面加一个顶部区域和底部区域。一个管理系统的界面可以粗分为顶部标题部分、中间数据展示和处理的部分、底部备注和状态部分。 在增加这二个区域之前&#xff0c;我们先在MainModel.js中加入一些数据。 1 Ext.define(app.view.main.MainModel, {2 extend: Ext.a…

java mongo 查询数组_MongoDB查询(数组、内嵌文档)

一、简介我们上一篇介绍了db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段&#xff0c;我们今天介绍了对数组和内嵌文档的查询操作&#xff0c;尤其是对$elemMatch 同样可以用在find方法的第二个参数来限制返回数组…

手机触摸屏的分类和原理,供大家选择手机时用

转载自&#xff1a;http://www.51testing.com/?uid-144635-action-viewspace-itemid-216296 必大家很关心的一个问题就是手机的触摸屏寿命是多少吧&#xff01;还有就是到底是电阻式触摸屏&#xff08;诺基亚的&#xff09;好还是电容式触摸屏&#xff08;iPhone等&#xff09…

Actionbarsherlock Demo 浅析 :Overlay

让Actionbar处于覆盖模式&#xff0c;当Activity需要显示大量滚动的内容&#xff0c;尤其是包含图片内容的时候&#xff0c;Overlay模式非常有效。 requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);//将Actionbar设置为Overlay模式。 getSupportActionBar().setBackg…

浅析C#中构建多线程应用程序

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 引言 1.理解多线程 2. 线程异步与线程同步 3.创建多线程应用程序 3.1通过System.Threa…

58同城高性能移动Push推送平台架构演进之路

2019独角兽企业重金招聘Python工程师标准>>> 本文详细讲述58同城高性能移动Push推送平台架构演进的三个阶段&#xff0c;并介绍了什么是移动Push推送&#xff0c;为什么需要&#xff0c;原理和方案对比&#xff1b;移动Push推送第一阶段&#xff08;单平台&#xff…

java不规则算法_分布式id生成算法 snowflake 详解

背景在复杂分布式系统中&#xff0c;往往需要对大量的数据和消息进行唯一标识。如在支付流水号、订单号等&#xff0c;随者业务数据日渐增长&#xff0c;对数据分库分表后需要有一个唯一ID来标识一条数据或消息&#xff0c;数据库的自增ID显然不能满足需求&#xff0c;此时一个…

Android中下载、安装和卸载(原)

应用场景&#xff1a;在检查版本更新的时候经常需要从服务器端下载然后安装到手机中 使用工具&#xff1a; XUtils&#xff0c;这个开源的框架真的是需要花大把时间去阅读和理解的&#xff0c;十分有用的&#xff0c;on the way &#xff01; fighting&#xff01; 下载&#x…

python对文件进行读写操作

2019独角兽企业重金招聘Python工程师标准>>> python进行文件读写的函数是open或file file_handler open(filename,,mode&#xff09; Table mode 模式描述r以读方式打开文件&#xff0c;可读取文件信息。w以写方式打开文件&#xff0c;可向文件写入信息。如文件存在…

[转]VisualStudio如何组织解决方案的目录结构

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 解决方案与项目&#xff1a; 从VC6之后VC系列就使用解决方案&#xff08;Solution&…

java几种删除_几种删除Linux目录的方法

在Linux中有很多方法可以删除目录&#xff0c;在图形化界面可以利用文件管理器&#xff0c;或者通过终端删除。本文将介绍在文本界面使用命令删除目录。使用rmdir删除目录Rmdir命令间成“remove directory”&#xff0c;用于删除空目录的命令。例如&#xff0c;删除一个名为“M…

【SpringMVC】SpringMVC系列6之@CookieValue 映射请求Cookie 值

6、CookieValue 映射请求Cookie 值 6.1、示例 CookieValue 可让处理方法入参绑定某个 Cookie 值&#xff0c;示例如下&#xff1a;

杭电OJ-2104_hide handkerchief超简洁代码

#include<iostream> using namespace std; int n, m;; int zz(int a, int b) {return b0 ? a: zz(b, a%b); } int main() {while (cin >> n >> m&&n ! -1 && m ! -1)cout << (nb(n, m) 1 ? "YES" : "POOR Haha"…