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

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的基本应用

如果查到了,则返回具体的值,如果没有查到,则返回null


使用Iterator输出Map接口中的内容


HashSet:是无序列存放滴~~~


将全部的key进行输出


输出全部的值


(12)Hashtable


(13)TreeMap

按key进行排序,本操作中依然使用了Comparable接口。

TreeSet:有序存放,是通过Comparable接口完成的


(14)Stack

入栈:public Object push(Object obj)

出栈:public Object pop()

注意点:如果此时栈中已经没有内容了,则会出现异常。


(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


将内容保存成普通文件:


将内容保存为XML文件:


从XML文件中把属性读取出来


(16)Map重要补充


以上的程序可以通过key找到value。

现在把代码反过来


代码反过来之后,发现没有得到真正想要的内容,而是返回了null。



此时如果要通过匿名对象来当作key,找到属性的话,就必须牵扯到Object中的几个方法:

· 对象比较:

· 通过hashCode;


Java中是通过equals和hashCode方法去确认对象唯一性,可以进行比较。

但是以上的程序需要一点更改,因为不能让所有对象的hashCode方法的返回值都是一样的,所以可以经过一些自己简单的运算。


一个完整的类最好覆写Object类中的三个方法:

· hashCode

· equals

· toString

(17)额外补充(对象克隆)

就是把对象的内容重新复制一份,复制出一个新的对象

protected Object clone() throws CloneNotSupportedException

克隆方法是一个受保护的方法。所以在其需要对象被克隆的子类中必须扩大权限,否则外部无法看见。

对象所在的类必须实现Cloneable接口

Java程序中常用的有两大标识接口:

· 可序列化:Serializable

· 可克隆:Cloneable


总结

就是向里面不断加入元素,可以动态的扩充,而且可以有存放单值的,也可以有存放一对值的。

而且在集合中对于排序,使用的是Comparable接口。

实例的模型很重要 —— Hibernate、EJB 3.0

欢迎工作一到五年的Java工程师朋友们加入Java架构师:697558955

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

原文地址:https://blog.51cto.com/14233733/2373166

时间: 2024-11-03 22:38:36

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

零基础学python-2.21 回到我们的游戏 加入类和函数

我们再一次回到游戏当中,这次,我们将会加上类与函数的用法 回顾一下以前的代码: import random exitTag=0 userList={} while exitTag!=1: userName=input("请输入你的名字:") if userName=='exit': exitTag=1 break; else: secret=random.randint(1,100)#生成随机数 #print (secret) time=6#猜数字的次数 guess=0#输入的数字 m

www808888webcom零基础学Java怎么开始?199O883661学习哪些内容?

零基础学Java怎么开始?Java要学习哪些内容?攻城狮之友 2018-11-12 17:13:34Java 语言是一门随时代迅速发展的计算机语言程序,其深刻展示了程序编写的精髓,加上其简明严谨的结构及简洁的语法编写为其将来的发展及维护提供了保护.那么零基础学Java怎么开始?Java要学习哪些内容呢? 头一阶段的Java基础 JavaEE的学习内容从计算机基本概念,DOS命令开始,入门编程语言扫盲,什么是程序,如何配置Java开发环境,Java编程的过程是怎样的,Java有什么物特点,程序是如

【软帝学院】零基础学Java,必须搞懂的10个问题!

零基础学Java,必须搞懂的10个问题! Java是当前互联网行业内的热门语言,不仅可以应用于Android和网站开发而且也广泛应用于金融服务.高频金融空间等领域.也正是因为高居不下的热度,越来越多的人选择学习Java语言.那么零基础学习Java都需要搞懂那些问题呢? 1.Java语言的特点,Java与c++的区别 Java语言具有简单易学.安全性.可靠性.支持多线编程.编译和解释共存.与平台无关性等特点.Java与c++都是面向对象的语言.两者的区别是,C++的类支持多重继承,而Java的类是

零基础学Java,必须搞懂的10个问题!

零基础学Java,必须搞懂的10个问题!Java是当前互联网行业内的热门语言,不仅可以应用于Android和网站开发而且也广泛应用于金融服务.高频金融空间等领域.也正是因为高居不下的热度,越来越多的人选择学习Java语言.那么零基础学习Java都需要搞懂那些问题呢?1.Java语言的特点,Java与c++的区别Java语言具有简单易学.安全性.可靠性.支持多线编程.编译和解释共存.与平台无关性等特点.Java与c++都是面向对象的语言.两者的区别是,C++的类支持多重继承,而Java的类是单继承

零基础学python-2.7 列表与元组

其实,可以把列表和元组看成普通的数组,但是这个数组可以存储不同的数据类型(对象) 列表和元组的区别   列表 元组 使用的符号 [] () 元素数量 可变 不可变 修改元素 不可以 可以 如果大家有编程基础,列表就像java里面的List,元组就像java里面的数组,不过这个数组是只读的 下面给大家举个例子: 列表可以使用下标来读取或者修改元素 元组只可以通过下标读取元素,不可以修改元素 元组可以像字符串一样使用切片操作符来截取元素,但是有个区别就是,如果下标为负数或者超过元组长度,不显示 这节

零基础学python-6.1 变量、对象与引用

如果你曾经学习过c,java等静态语言,变量.对象等都需要定义类型,否则报错 在python里面,类型,是在运行中动态设定的 之前我们已经多次提到变量,我们在这里再次说一下: 我们以a=3为例子说明 1.变量的创建 先有了3这个整形对象,然后将3这个对象赋值给a这个变量,a这个变量只有初始化之后才能够使用 2.变量的类型 变量不会有与之关联的类型的信息或者约束,类型是存在与对象当中,例如上面的a=3,a是没有类型的,a的类型存在与3这个对象,如果是a='a',a的类型是字符串,说白了,a的类型取

零基础学python-8.3 列表的索引、分片和矩阵

索引: 注意:如果超出长度,则报错 如果索引为负数,则取数的方向反转 >>> aList=['123',123,123.0] >>> aList[0] '123' >>> aList[2] 123.0 >>> aList[-2] 123 >>> aList[-3] '123' >>> aList[3] Traceback (most recent call last): File "<

[零基础学python]一些关于Python的事情

如同学习任何一种自然语言比如英语.或者其它编程语言比如汇编(这个我喜欢,可惜多年之后,已经好久没有用过了)一样,总要说一说有关这种语言的事情,有的可能就是八卦,越八卦的越容易传播.当然,以下的所有说法中,难免充满了自恋,因为你看不到说Python的坏话.这也好理解,如果要挑缺点是比较容易的事情,但是找优点,不管是对人还是对其它事务,都是困难的.这也许是人的劣根之所在吧,喜欢挑别人的刺儿,从而彰显自己在那方面高于对方.特别是在我们这个麻将文化充斥的神奇地方,更多了. 废话少说点(已经不少了),进入

零基础学python-2.8 字典

字典类型,其实就是相当于java的map,通过key-value来记录数据,工作原理类似于哈希表 几乎所有的python对象都可以作为key,但是一般最常用的还是数字和字符串 字典元素使用{}括起来 下面给大家举几个简单的例子: 我们看看上图,dict由两个元素组成,a.b分别是它们的key,而"abc""efg"则是它们对应的value 我们可以通过可以,找到相应的value 如:>>> dict["a"] 也可以通过设置ke

零基础学python-15.4 函数的多态vs对象的多态

这一章节我觉得有必要再来谈一下函数的多态 1.函数的多态 指的是函数根据参数的不同而进行不同的运算 >>> def times(x,y): return x*y >>> times(2,3) 6 >>> times('ray',3) 'rayrayray' >>> 我们再来引用昨天的代码,所谓函数的多态,指的是函数会根据参数类型的变化,而且做出不同的运算 例如上面的代码,第一次times函数引入两个整形参数,得出的结果是整形的乘法 第