1、类集:一个动态的对象数组。--不受对象数组长度的限制。
(1)实用类的形式实现的对象数组,对于任何对象所有的操作形式都是一样的。
(2)类集中的元素类型都是统一的。
2、类集框架的主要接口
(1)Collection接口:单值存放的最大父接口。可存放多个单值。此接口使用泛型
<1>.List接口:可存放重复内容。
List中插入的顺序就是保存的顺序。
比较点 | ArrayList子类: | Vector子类: |
推出时间 | JDK 1.2之后,新的操作 | JDK1.0时推出,旧的操作 |
性能 | 异步处理方式,性能高 | 同步处理方式,性能低 |
线程安全 | 非线程安全操作 | 线程安全操作 |
输出 | Iterator、foreach输出 | Iterator、foreach、Enumeration输出 |
<2>.Set接口:不能存放重复内容,重复内容需hashCode()和equals()方法区分 。
Set方法和Collection方法一致,无法像List一样实现双向输出。因为Set中 没有get()方法。
HashSet插入的顺序并不是集合中保存的顺序。采用散列的存储方式,没有顺序。
TreeSet可以对输入的数据进行有序排序。TreeSet中的元素是有序存放的,所以对于一个对象必须指定好其排序规则,且TreeSet中的每个对象所在的类都必须实现Comparable接口才可以正常使用。(只实现Comparable接口若换成HashSet则也会出现重复内容,所以并不是真正意义上去掉重复元素。需要使用equals()方法和hashCode()方法)
Set接口依靠equals()方法和hashCode()方法完重复元素判断。
TreeSet依靠Comparable接口完成排序。
<3>.Queue接口:队列接口。
LinkedList子类:表示链表的操作类。采用先进先出的操作方式
找到链表头操作:public E element()==>找到表头
public E peek()==>找到不删除表头
public E poll()==>找到并删除表头
<4>.SortedSet接口:可对集合中数据进行排序。TreeSet中实现了SortedSet接口。
Java中很少直接使用Collection接口进行开发,基本上使用其子接口。
(2)Map接口:存放一对值的最大父接口。以key->value形式保存。Map接口也应用了泛型,必须同时设置key和value的类型。
Map接口使用注意事项:
A、不能直接使用迭代(Iterator、foreach)输出Map中全部内容。步骤:将Map接口实例通过entrySet()方法变为Set接口对象。->通过Set接口实例为Iterator实例化。->通过Iterator迭代输出,每个内容都是Map.Entry的对象。->通过Map.Entry进行key->value的分离
B、直接使用非系统类作为key:使用自定义的对象表示Map中的key,则对象所在的类中一定要覆写equals()和hashCode()方法,否则无法通过匿名对象找到对应的value。
Map.Entry接口是Map内部定义的一个接口,专门用来保存key->value的内容。实际上将“key->value”的数据保存在Map.Entry接口的实例之后,再在Map集合中插入Map.Entry的实例化对象。(Map.Entry在集合的输出时会使用到)
Map.Entry接口使用static关键字声明的内部类,可以由“外部类.内部类”直接调用。
子类:HashMap:无序存放,新操作,key不允许重复。
提供keySet()方法将Map接口中全部key变为一个Set集合,使用Iterator接口输出
提供values()方法,将全部value值返回为Collection类型。
Hashtable:无序存放,旧操作,key不允许重复。Map中的key不允许重复,重复就是覆盖。
TreeMap:可以排序的Map集合,按集合中的key排序,key不允许重复。自定义作为key的类型时需要实现Comparable接口。
WeakHashMap:弱引用的Map集合,当集合中的某些内容不再使用时清除掉无用的数据,使用gc进行回收。
IndentityHashMap:key可以重复的Map集合。key值允许重复只要两个对象的地址不同
比较点 | HashMap | Hashtable |
推出时间 | 新的操作类 | 旧的操作类 |
性能 | 异步处理方式,性能高 | 同步处理方式,性能低 |
线程安全 | 非线程安全的操作类 | 线程安全的操作类 |
空键 | 允许key值为null | 不允许key值为null |
<1> SortedMap接口:存放一对值的排序接口。内容按照key排序。
3.集合的输出:如果输出Collection、Set集合中的内容可以将其转化为对象数组输出,而使用List则可以直接通过get()方法输出。
类集中提供了四种输出方式:(1)、Iterator迭代输出,使用最多(通过get()方法)
(2)、ListIterator:是Iterator的子接口,专门用于输出List内容
(3)、Enumeration:旧的接口,功能与Iterator类似
(4)、foreach:可以输出数组和集合。
(1)、Iterator迭代输出(从前往后单项输出):Iterator接口使用时需要制定泛型,此处指定的泛型类型需要与集合中的泛型类型一致。
Iterator是一个接口,可以直接使用Collection接口中的iterator()方法为其实例化。则List和Set子接口也可以使用Iterator接口输出。
Iterator接口很少调用删除操作,Iterator自身存在remove()方法,若在Iterator迭代输出过程中使用了List中的remove()方法则代码会出现错误(内容确实被删除但是迭代输出在内容删除后就终止)。
(2)、ListIterator接口:由前向后或者由后向前双向输出。(进行双向输出时,若想完成由后向前输出,则一定先进行由后向前输出)
ListIterator接口只能通过List接口实例化,即只能输出List接口中的内容。
(3)、foreach输出:除了可以完成数组的输出对于集合的输出也同样支持。
(4)、Enumeration接口:最早的迭代输出接口,使用Vector时就使用Enumeration接口进行输出。(使用Vector类中的elements()方法取得一个Enumeration接口的实例)
此接口中没有删除数据的方法,方法名的定义比Iterator中方法名长。
4.Collections和Collection关系:Collection为接口Collections为工具类
Collections类与Collection接口无直接关系,但与集合中各接口都有操作方法支持。
5.Stack类:采用先进后出的数据存储方式。Stack类是Vector的子类。
6.Properties属性类:本身是Hashtable的子类,在一个属性文件中保存了多个属性,每个属性就是直接用字符串表示出来的“key->value对”.
属性类可以将其内容保存到文件中,使用store()方法,同时指定OutputStream类型,指定输出位置。属性文件后缀任意,一般统一设置“*.properties”。也可以将全部内容以XML格式通过输入输出流保存在XML文件中,后缀为“*.xml”