集合类的作用:
集合类可以解决:可以动态完成对象集合的操作,并可以不受对象的数量的
限制。java的类集框架对一些实现好的数据结构进行了包装,使用方便。
集合类可以分为保存单值的Collection和能保存双值的Map。并可以通过Properties
类产生属性文件,这种文件可以保存运行时需要的属性,要用时可以加载进来。
一.单值的Collection集合
为了方便从使用上来区分,我把所学到的保存单值的集合类的各接口分为操作组 和
输出组。
1、操作组:
在进行集合类的 增加元素、删除元素、查找元素等操作时,一般用以下接口:
Collection :是存放一个单值对象的最大父接口。一般不直接使用此接口进行操作。
在实际开发中会使用以下子接口进行增删查改的操作:
*List:可以存放重复的内容和多个null值,并扩展了许多Collection接口中没有
的方法。
*ArrayList类:实现了List接口,可以使用ArrayList类来实例化List接口。
Vector类:也可以使用此类来实例化List接口。操作与ArrayList类似但是
Vector类有其独立的方法来对集合进行操作。
ArrayList与Vector类的主要区别
ArrayList Vector
1推出时间: JDK1.2后推出 JDK1.0时推出
2性能: 异步处理,性能较高 采用同步处理,性能较低
3线程安全: 非线程安全的 线程安全的
4输出: Iterator、foreach Iterator、foreach、Enumerantion
*Set:
不能存放重复的内容,可以有一个null值,所有的内容可以靠hashCode()和
equals()两个方法来区分。
就是说:如果自己设计的类,产生了很多实例对象,需要把这些实例对象存放在
Set集合中,那么就需要自己覆写(Override)hashCode()和equals()方法,由编
译器通过这两个方法来确定此类产生的对象是否相同。如果是同一个对象,则不
能放入实现了Set接口的集合中。
HashSet类 :实现了Set接口,它不能存放相同的元素,而且采用了散列存放的存
储方式。所谓散列存放就是存放的顺序是不固定的。
TreeSet类:实现了Set接口,并可以对元素进行有序排列。但如果要将自己编写
的类的对象放入到Set接口中,则此类必须实现Comparable接口,要实现Comparable
接口,就必须覆写(Override)public int compareTo()方法。这样可以使用这个
方法用于排列对象的顺序。
二、输出组:
Iterator接口:用于为以上类型的集合进行输出和删除操作,采用迭代的方式输出。
迭代就是先判断元素是否存在,然后再把元素取出。如果要取得Iterator接口的实例,
则必须用Collection接口的子类实例调用iterator()方法来获得。
在输出时:先用-->public boolean hasNext()判断下一个元素是否存在,然后使用
public E next() 取出元素,或者使用public void remove()删除
当前元素。采用循环,就可以把集合中多个或者所有元素历遍。
注意,hasNext()方法会让指示器指向下一个对象,如果使用了next()
方法取出了所有的元素,虽然集合中的元素没有减少,但是指示器会指向
集合的末端,此时再调用remove方法来删除元素,则不会成功。
Enumeration接口:作用和Iterator类似,只针对Vector来输出,而且没有删除元素的
方法。
二、双值的集合Map
/*以上是只能保存单值的集合类,Map接口可以一次保存以两个对象为一组的双值。其中
第一个值为key,第二值为value,可以通过get(key)的方式,得到value的值。要得到
Map集合中的元素,有三种方式:
a、通过getKeys()方法获得所有的key值,也就是得到一个key值的集合,此方法返回一个
Set的实例对象。
b、通过getValues()方法获得所有的value值,此方法返回一个Colletion的实例对象。
c、Map集合中有个内部接口:Map.Entry(),可以同过getEntry()方法得到一个Set的实
例对象,这时Set中的每个元素就是Map.Entry类型的,Map.Entry类由一对key,value组成。
此时可以使用Set类的.iterator()方法生成Iterator对象,通过Iterator对象迭代输出
每个Map.Entry对象,最后使用Map.Entry对象的getkey()和getValue()方法得到单个的
key值/value值。(不使用Iterator的话,可以使用foreach)。
Map本身是接口,要使用的话,必须用其子类为它实例化。以下是目前学到的Map的实现类:
HashMap:Map的实现类,对一组key、vaule值散列保存,一对key、value可以用一个Map.
Entry对象来存放。
HashTable:也实现了Map接口,操作和HashMap类似,其区别跟List与Vector的区别类似。
三、Properties类与属性文件
Perperties类是HashTable的子类,可以保存都为String类型的key-value属性。并可以
使用OutputStream和InputStream类来输出输入属性。
以下是学习集合类所做的一些简单练习:
*用于作为集合中的元素的Person类,覆写了Object的equals()方法和hasCode()方法,
以及toString()方法。
*ListTest,使用Person类作为元素测试了List的操作和使用Iterator迭代器进行输出
和删除操作。
*HashSetTest:只观察了散列存放。
*HashMapTest:对keys,values和Map.Entry输出。
*PropertyTest:使用Properties类增加元素,并输出到一个文件中
再从文件中加载到属性。