[零基础学JAVA]Java SE应用部分-35.JAVA类集之四

JAVA按以下重要顺序
· 面向对象
· 类集框架
· JDBC
· 文件编程
本季目标
主要讲解以下的内容:
· Collection
· List
· Set
· Map
· Iterator
· ListIteator
· Enumeration
· for…each语句(JDK 1.5的新特性)
· Comparable接口
· 二叉树
1、类集结构
(1)类集的产生目的
类集简单来讲就是一个动态的对象数组,此对象数组可以改变大小,可以任意的实现对象的增加、删除、输出。所有的类集存放java.util包中。
(2)类集的划分
1、存放单值:Collection
2、存放一对值:Map
3、输出:Iterator
(3)类集的具体概念
<1>Collection(只能存放一个值)
|- 主要功能:用于输出使用
|- 子接口:List(允许有重复的元素,而且加入的顺序就是输出的顺序)
    |- 子类:ArrayList,是在Java 2之后推出的,是新的类,是使用异步处理方式,其性能较高
    |- 子类:Vector,是在JDK 1.0的时候就推出,因为是旧的类,有很多List所没有的功能,是使用同步处理方式,其线程安全性较高,会比较慢。使用Vector除了可以使用Iterator输出之外,也可以使用Enumeration进行输出。两者是通用的。Vector子类允许直接使用addElement(Object obj),也是可以向集合中加入元素的。
    |- 自己新增的方法:
        |- 取每一个对象:public Object get(int ind) ;
    |- 子类:Stack(栈)
|- 子接口:Set(不允许有重复元素,重复元素会替换)?如何可以区分重复元素呢? 
    |- 子类:HashSet:是无序列存放
    |- 子类:TreeSet:有序存放,是通过Comparable接口完成的
|- 常用方法:
    |- 增加一个对象:public boolean add(Object obj)
    |- 取得类集的长度:public int size() ;
    |- 判断集合中的内容是否为空:public boolean isEmpty()
    |- 删除一个对象:public boolean remove(Object obj) :就必须牵扯到对象的比较状态。
    |- 实例化Iterator对象:public Iterator iterator() ;
<2>JDK 1.5提供了一个方便的输出操作:for…each语句。
<3>Iterator接口输出是最常见的

|- 常用方法
    |- public boolean hasNext():判断是否有下一个元素
    |- public Object next():取出下一个元素
|- 子接口:ListIterator,可以进行双向输出,只对于List接口有用
    |- 常用方法:具备了Iterator接口中的全部内容
        |- public boolean hasPrevious()
        |- public Object previous() 
<4>Enumeration(在1.5之后也加入、泛型支持哈~)
|- 常用方法:
    |- 判断是否有下一个元素:public boolean hasMoreElements()
    |- 取出元素:public Object element()
5、 Map(存放一对值)
|- 功能:与Collection的功能不一样,Map的主要功能是用于查找使用的。
|- 注意点:
    |- 使用Map操作时,不能直接使用Iterator进行输出。
    |- 而且里面不能有重复key。
    |- 如果非要使用Iterator进行输出,则必须按以下的步骤进行操作:
|- Map --> Set --> Iterator --> Map.Entry --> key与value的分离
|- 常用子类:
    |- HashMap:无序存放,是新的类,是JDK 1.2时推出的,是异步处理,性能较高
    |- Hashtable:是旧的类,是JDK 1.0时推出的,是线程安全的,性能较低
        |- Properties(重点):属性文件操作类
    |- TreeMap:有序存放
|- 常用方法:
    |- 向集合中保存数据:public Object put(Object key,Object value):返回的是value
    |- 从集合中查找数据:public Object get(Object key):根据key查找。
    |- 将Map数据变为Set实例:Set<Map.Entry<K,V>> entrySet()
    |- 将全部的key变为set实例:Set<K> keySet()
    |- 将全部的vlaue变为Collection接口实例:Collection<V> values()
|- Map.Entry:保存key与value
    |- public Object getKey()
    |- public Object getValue()
|- 存放key的注意点:
################Michael分割线####################
2、代码讲解
(11)HashMap
Map的基本应用
image 
如果查到了,则返回具体的值,如果没有查到,则返回null
image
使用Iterator输出Map接口中的内容
image
HashSet:是无序列存放滴~~~
image
将全部的key进行输出
image
image
输出全部的值
image
image
(12)Hashtable
image
image
(13)TreeMap
按key进行排序,本操作中依然使用了Comparable接口。
image
TreeSet:有序存放,是通过Comparable接口完成的
image
(14)Stack
入栈:public Object push(Object obj)
出栈:public Object pop()

注意点:如果此时栈中已经没有内容了,则会出现异常。
image
image
(15)Properties(重点
· 属性操作类,所有的key 与value 都按属性设置,都是字符串。而且此属性文件可以直接保存在文件中,或从文件中读取出来。
设置属性:public Object setProperties(String key,String value)
取得属性:
|- public String getProperty(String key) 根据key读取属性,返回值
|- public String getProperty(String key,String def) :如果没有读到值,则返回def指定的内容。
保存在文件中:
|- 保存成普通文件:public void store(OutputStream out,String comments) throws IOException
|- 保存成XMl文件:public void storeToXML(OutputStream out,String comments) throws IOException
从文件中读取属性:
|- 从普通文件中读取:public void load(InputStream input) throws IOException
|- 从XML文件中读取:public void loadFromXML(InputStream input) throws IOException
image
image
将内容保存成普通文件:
image
image
将内容保存为XML文件:
image
image
从XML文件中把属性读取出来
image
image
(16)Map重要补充
image
image
以上的程序可以通过key找到value。
现在把代码反过来
image
image
代码反过来之后,发现没有得到真正想要的内容,而是返回了null。
image
image
此时如果要通过匿名对象来当作key,找到属性的话,就必须牵扯到Object中的几个方法:
· 对象比较:
· 通过hashCode;
image
image
Java中是通过equals和hashCode方法去确认对象唯一性,可以进行比较。
但是以上的程序需要一点更改,因为不能让所有对象的hashCode方法的返回值都是一样的,所以可以经过一些自己简单的运算。
image
image
一个完整的类最好覆写Object类中的三个方法:
· hashCode
· equals
· toString
(17)额外补充(对象克隆)
就是把对象的内容重新复制一份,复制出一个新的对象
protected Object clone() throws CloneNotSupportedException
克隆方法是一个受保护的方法。所以在其需要对象被克隆的子类中必须扩大权限,否则外部无法看见。
对象所在的类必须实现Cloneable接口
Java程序中常用的有两大标识接口:
· 可序列化:Serializable
· 可克隆:Cloneable
image
image
总结
就是向里面不断加入元素,可以动态的扩充,而且可以有存放单值的,也可以有存放一对值的。
而且在集合中对于排序,使用的是Comparable接口。
实例的模型很重要 —— Hibernate、EJB 3.0。
######################Michael分割线#############################

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

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

相关文章

可在单片机上运行的简易图形库

来源&#xff1a;电子森林&#xff0c;排版&#xff1a;晓宇微信公众号&#xff1a;芯片之家&#xff08;ID&#xff1a;chiphome-dy&#xff09;发现一个网站 - http://www.technoblogy.com/&#xff0c;基本都是关于用ATtiny单片机做各种创意设计的&#xff0c;非常适合初学单…

欧拉回路 欧拉路径

欧拉路径&#xff08;瞎&#xff09;定义 : 如果有一条路径使得能够走完所有的边且每一条边经过有且只有一次&#xff0c;这样的路径叫做欧拉路径 欧拉回路定义 : 如果有从起点出发最后回到起点的一条路径使得能够走完所有的边且每条边经过有且只有一次&#xff0c;称其为欧拉回…

终于搞清楚开漏输出和推挽输出这个鬼东西

先说下推挽输出&#xff0c;简单的说&#xff0c;就是想输出高电平&#xff0c;就输出高电平&#xff0c;想输出低电平就输出低电平。推挽电路上面是NPN三极管&#xff0c;下面是PNP三极管&#xff0c;请注意输入端和输出端的波形。下面是输入波形当输入为正时&#xff0c;上面…

被称为“C#圣经”的权威著作!

媒体评论 “哇&#xff0c;这本书太棒了&#xff01;对.NET 3.5和CLR的阐释非常深入。它已经成为我的头号参考书。强烈推荐给所有.NET程序员。” ——Jeff Wilcox&#xff0c;微软.NET开发团队资深工程师 “Troelsen大师王者归来了&#xff01;C#程序员分为两类&#xff1a;读…

分享一篇很不错的CMake入门文章,值得收藏细读!

https://www.hahack.com/codes/cmake/▌什么是 CMake?你或许听过好几种 Make 工具&#xff0c;例如 GNU Make &#xff0c;QT 的 qmake &#xff0c;微软的 MS nmake&#xff0c;BSD Make&#xff08;pmake&#xff09;&#xff0c;Makepp&#xff0c;等等。这些 Make 工具遵循…

例用C# 变更文件夹时间

想变更文件夹的时间.以前做了一个软件.是变更文件的时间,应用了C# API.这次和上一次相同,用Form来通过外部对时间进行确认.确认后应用C#中,System.IO ->Directory->SetCreationTime 来对时间进行变更.以下是C#应用的例子.基本相同.但是,不要忘记小问题,下面的例子的命名空…

Linux 30岁,这些年经历了什么?

3月19日&#xff0c;Linux基金会在Twitter上发布推文宣布&#xff0c;其小企鹅的标志“Tux”已经30周岁了&#xff0c;还为其设计了一系列的庆祝海报&#xff0c;以便大家转发分享。虽然离Linux的生日还有一段时间&#xff0c;但是今年Linux基金会已经提前先帮小企鹅“Tux”过生…

用CSS画基本图形

用CSS画基本图形 1、正方形 代码如下&#xff1a; #square { width: 100px; height: 100px; background: red; } 2、长方形 代码如下:#rectangle { width: 200px; height: 100px; background: red; } 3、圆形 代码如下:#circle { width: 100px; height: 100px; …

手撸双链表,图解

C语言&#xff0c;链表C实现单向链表深入理解Linux内核链表跟单链表不同&#xff0c;双链表的节点包含两个指针&#xff0c;一个指针指向上一个元素&#xff0c;一个指针指向下一个元素。▌如下图学习数据结构的时候&#xff0c;要像认识一个人一样&#xff0c;要了解这个人有什…

STM32串口用中断还是用轮询

1.从轮询到中断很多同学都不喜欢用中断&#xff0c;而偏爱用轮询的操作方式。这是不是和我们的天性有关呢&#xff1f;每个人都喜欢一切尽在掌握中&#xff0c;肯定都不喜欢被打断。我们常常都有这样的经验&#xff1a;正在跟别人说一件事&#xff0c;然后突然有个电话打进来&a…

使用Buildroot为I.MX6制作根文件系统

1.引言接触Freescale/NXP的I.MX6处理器大概有了两年多的时间&#xff0c;对于一个最初玩MCU的我来说&#xff0c;真是面临了很多的挑战。最让我感到郁闷和崩溃的是那个官方的基于Yocto的开发环境&#xff0c;搭建它要求真是太高了&#xff0c;机器得有上百G的空间&#xff0c;U…

扁平的信标灯

▌交流磁场信号会改变地磁计吗&#xff1f;卓大&#xff0c;我想问个问题&#xff0c;智能车比赛的交流信号磁场会对地磁计产生影响吗?▓ 回复&#xff1a; 在今年的智能车竞赛中存在两个交流信号源&#xff1a;&#xff08;1&#xff09;第一种是电磁赛道上的电磁导引线&…

如何选择合适的Web安全网关?

日益加剧的网络威胁让Web安全网关&#xff08;Web Security Gateway&#xff0c;WSG&#xff09;逐渐成为企业边界网络安全防护的新宠。基于OSI模型第七层(应用层)的Web安全网关具有反恶意软件、上网行为管理以及安全审计等诸多安全检测或管控能力。然而面对铺天盖地的广告和琳…

屏下指纹介绍

一、光学指纹问题现状光学指纹当前随着成本的下降&#xff0c;各大厂商都在低中高端旗舰用上了光学指纹。有别于传统的电容指纹&#xff0c;光学指纹在解锁性能上目前都进行了优化&#xff0c;性能接近电容指纹。二、光学指纹电容指纹原理两者原理都是对指纹的纹路脊谷进行信号…

ABAP Netweaver和Hybris里获得内存使用统计数据

ABAP Netweaver 事物码ST06 Hybris 每隔5秒钟&#xff0c;Hybris Administration console会发起一个到Java后台的AJAX查询请求&#xff1a; 这个5秒的时间间隔定义在project.properties配置文件里&#xff0c; 然后使用JavaScript的setInterval建立定期轮询&#xff1a; Java后…

STM32做平衡小车,代码,PCB都现成的,妈妈再也不用担心我的毕业设计了

▌一、硬件介绍主控芯片用的是100脚的STM32F103VET6&#xff0c;陀螺仪用的是MPU6050&#xff0c;电机驱动用的是TB6612&#xff0c;蓝牙是汇承的HC05邮票孔封装的&#xff0c;WIFI用的是济南有人科技的USR-WIFI232-S&#xff0c;小车底盘用的是平衡小车之家的某一款带编码器的…

Apache 配置:是否显示文件列表

Apache 配置&#xff1a;是否显示文件列表 进入虚拟主机配置文件 显示文件列表的话 options Indexes FollowSymLinks 不显示文件列表的话 options FollowSymLinks 文章来源&#xff1a;刘俊涛的博客 地址&#xff1a;http://www.cnblogs.com/lovebing 欢迎关注&#xff0c;有问…

微信越滑越卡

这篇文章是我的朋友小二哥写的&#xff0c;他解决了一个问题并提交了一个补丁给google合入&#xff0c;当然了&#xff0c;这也是他第一次提交补丁被google采纳。我觉得这才是做技术的样子&#xff0c;二哥也很喜欢篮球&#xff0c;&#xff0c;为二哥吹一波。哈哈。关于这次补…

扁平化可伸展导航

<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>扁平化可伸展导航[原创]</title><link rel"stylesheet" type"text/css" href"nav.css"><link rel"stylesheet" t…

大佬为何可以把单片机描述得如此形象生动?

某年某日某产房&#xff0c;你诞生了&#xff08;power up , 上电运行&#xff09;&#xff0c;结果你不哭&#xff0c;医生把你提起来&#xff0c;屁股上狠狠一巴掌&#xff0c;你哇哇大哭&#xff08;reset, 复位成功&#xff09;&#xff0c;护士给你检查&#xff0c;看有没…