JAVA类集
JAVA按以下重要顺序
· 面向对象
· 类集框架
· JDBC
· 文件编程
· 面向对象
· 类集框架
· JDBC
· 文件编程
本季目标
主要讲解以下的内容:
· Collection
· List
· Set
· Map
· Iterator
· ListIteator
· Enumeration
· for…each语句(JDK 1.5的新特性)
· Comparable接口
· 二叉树
· Collection
· List
· Set
· Map
· Iterator
· ListIteator
· Enumeration
· for…each语句(JDK 1.5的新特性)
· Comparable接口
· 二叉树
1、类集结构
(1)类集的产生目的
类集简单来讲就是一个动态的对象数组,此对象数组可以改变大小,可以任意的实现对象的增加、删除、输出。所有的类集存放java.util包中。
(2)类集的划分
1、存放单值:Collection
2、存放一对值:Map
3、输出:Iterator
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的注意点:
<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、代码讲解
(1)List实例
面向对象中明确说了子类可以为其接口实例化
(1)List实例
面向对象中明确说了子类可以为其接口实例化
在List接口的使用之中,可以发现,里面是允许有重复元素的。
同样,如果现在的代码中使用了Collection接收也是可以的
之前的代码编译的时候会出现一些警告:
注意:Demo02.java 使用了未经检查或不安全的操作。
注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。
注意:Demo02.java 使用了未经检查或不安全的操作。
注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。
说是一个不安全的操作,需要进行限制。
在JDK 1.5之前,类集中可以插入任意的数据,因为接收的类型全部是Object,但是在JDK 1.5之后加入了泛型技术,所以在所有的接口定义的时候已经可以明确的去声明到底里面所加的是那个对象。
这样做的好处:如果直接使用了Object接收的话,则肯定任意的数据对象都可以向里面加入。
这样做的好处:如果直接使用了Object接收的话,则肯定任意的数据对象都可以向里面加入。
现在都用字符串接收数据哈,如果全部使用同一个类型接收,两种类型不匹配,则肯定出现类型转换异常哈~
这道程序可以加入instanceof进行判断,判断之后再进行转型。但是这样会增加代码的复杂度,那样非常麻烦哈~我们可以在运行处设置只能接收一种类型的对象哈~
这样可以保证对象数组中的每一个对象的类型统一。现在所说的只是开发中的标准,一个集合里放的都是同一种对象。
判断是否为空:list.isEmpty()
删除一个对象:public boolean remove(Object obj) :就必须牵扯到对象的比较状态。
看下效果:
(2)Set实例
使用HashSet子类为Set接口实例化,观察其运行效果
使用HashSet子类为Set接口实例化,观察其运行效果
看下效果:
Set接口不允许有重复元素,重复元素会替换并且HashSet是无序列存放
(3)for…each语句(了解)
for(类型 对象名称:集合名称) --> JDK 1.5新特性哈~
(4)Iterator
Iterator只能由前向后输出,如果要想进行双向输出,则可以使用其子接口 —— ListIterator
Iterator只能由前向后输出,如果要想进行双向输出,则可以使用其子接口 —— ListIterator
这样的输出方法是最常用的哈~
(5)ListIterator
看下效果:
可以看到上面一行是由前向后输出,下面一行是由后向前输出哈~
类集的大体框架有所了解了哈~下季我们来研究两个实例哈~~~
################Michael分割线####################