首先得明白什么叫做类集,以及它的作用是什么?
类集实际上就是一个动态的对象数组,有人就会问了,不是有数组了吗?还要类集干嘛呢,其实啊,一般的数组都有一个长度的限制不,类集就是专门来解决这种限制的,使用类集可以很方便的向数组中增加任意多个数据,是很容易进行扩展和修改的。
我们来了解了解类集的架构,所有类集操作都存放在java.util包中:
Collection接口:
是保存单值集合的最大父接口,但是在一般的开发中,都不直接用Collection进行开发(操作意义不明确),而是使用其子接口进行开发。
List接口:内容允许重复。
ArrayList是List中最常用的子类,是一个基于数组的操作类。既可以增加数据,也可以删除数据。删除可通过两种方式删除:根据对象内容,根据对象对应的编号删除。
LinkedList也是List的子类,是一个基于链表的操作类。
Vector也是List的子类,它和ArrayList的区别在:
Set接口:不允许有重复元素,常用的子类有TreeSet(有序存放),HashSet(散列存放)。
TreeSet可以进行排序,那么它排序其中的原理是什么呢?一个对象数组要想排序,则依靠Comparable接口完成。所以对于TreeSet来说,其对象所在的类也必须实现Comparable接口,并且覆写其中的compareTo方法。
Set接口中不允许有重复元素,这其中的原理又是什么呢?通过覆写Object类中的hashCode()和equals()两个方法来实现对对象元素重复的判断。
SortedSet接口:也是具有排序功能,它是TreeSet的父接口,所以TreeSet也具有排序的功能。
在集合中的输出操作一般有以下几种方式:
1.Iterator2.ListIterator3.foreach输出4.Enumeration输出
Iterator接口(单向输出):
只要是碰到了集合输出的操作,就一定使用Iterator接口,因为这是最标准的做法。而Iterator接口的操作原理是什么呢?将元素一个个进行判断,判断是否有内容,有就将内容取出来。
要想实例化Iterator接口,必须依靠Collection接口来完成。
SortedSet<String> set = new TreeSet<String>();
set.add("1");
set.add("3");
set.add("2");
Iterator it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
虽然在
Iterator接口中也提供了remove()方法来删除当前的对象,但是在实际中很少用Iterator接口来实现删除操作的,主要用来输出内容。在这有一个注意点:如果在迭代输出的过程中使用了set中的remove()来执行删除,则代码会出现问题,马上跳出迭代循环。
ListIterator接口(双向输出):
它和Iterator接口的区别在:
1.Iterator用来遍历List,Set;而LIstIterator只能遍历List。
2.Iterator只能前向遍历;而ListIterator可以双向遍历。
3.ListIterator实现了Iterator接口,并包含其他功能。
注意点:在使用ListIterator接口进行向后输出时,必须在之前进行向前输出。
Enumeration输出:
只能通过Vector来实例化。
Map接口:
Map接口和Collection接口的区别:
Collection接口存的都是一个对象,单值对象;
而Map接口存的对象是以键值对(K-V)的形式存在。
Map接口的常用子类:
HashMap:无序,是新的操作类,key值不能重复。
HashTable:无序,是旧的操作类,key值不能重复。
TreeMap:按key值排序,key值不能重复。
WeekHashMap:弱引用的Map集合,当集合中的一些对象不再使用时,可以使用gc进行回收
IdentityHashMap:key值可以重复。
Map接口的Iterator输出:
1.将Map的实例通过entrySet()方法变为Set接口对象;
2.通过Set接口实例为Iterator实例化;
3.通过Iterator迭代输出。每个内容都是Map.Entry的对象;
4.通过Map.Entry进行key-->value的分离。
Map接口的foreach输出:
for(Map.Entry<String,String> en : map.entrySet()){...... }
SortedMap接口:具有排序功能,它是TreeMap的父接口,所以TreeMap也具有排序的功能。
Collections类:
它和Collection接口之间有什么联系呢?
两者之间并没有什么继承和实现的联系,只不过Collections类提供了一些对于Collection接口操作的支持。
Stack类:
Stack类是Vector的子类,提供对于栈的相关操作。
Properties类:
Properties类是HashTable的子类,提供对于属性的相关操作。