JAVA按如下重要顺序
· 面向对象
· 类集框架
· JDBC
· 文件编程
本季目标
主要讲解如下的内容:
· Collection
· List
· Set
· Map
· Iterator
· ListIteator
· Enumeration
· for…each语句(JDK 1.5的新特性)
· Comparable接口
· 二叉树
一、类集结构
(1)类集的产生目的
类集简单来说就是一个动态的对象数组,此对象数组能够改变大小,能够任意的实现对象的增长、删除、输出。全部的类集存放java.util包中。
(2)类集的划分
一、存放单值:Collection
二、存放一对值:Map
三、输出: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()
五、 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分割线####################
二、代码讲解
(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。
######################Michael分割线#############################