Collection库里的继承关系如图所示
Collection有集中集合的意思,表示一组对象,它是层次中的根接口。它可以而且只能用来存放Object类。所以像放整数浮点数什么的必须经过包装才能放入。对于继承它的接口或类,有的期内的元素可以有重复,有的不行。Collection内的方法主要有add(),isEmpty(),iterator()等。要注意,接口中的方法是未经实现的,如果继承它的类有未经实现的方法,那么这个类也是接口,以此类推,知道实现所有方法。
Set和List也是接口,他们是Collection更为具体的实现。Set是不包含重复元素的集合,所以如果试图加入重复的元素,后面加入的操作会返回false。反之,List是可以包含重复集合的。SortedSet也是一个接口,此接口规定所有要加入的元素必须是可以比较的,不然没法排序对吧。对于String类型可以默认比较,但是对于class型的就必须有自己定义的comparator。
1、 HashSet要牵扯到Hash码的问题。Hash码是和程序运行时内存中产生的对象有关的,定义在不同内存块中的对象其hash码不同。但是要注意的是String类型,由于java内特有的机制,内容相同的String对象不会重复产生,所以如下语句:
Stringstr1=new String(”wori”);
String str2=”wori”;
Str1和str2的hash码是相同的。当然,hash码的产生方法hashCode() 可以重构,比如说Person类里有个name属性,那么可以用name属性的hash码代替Person的。
HashSet应用举例:
其结果如下:
在HashSet里还有一个方法是iterator,该方法返回一个Iterator迭代器,返回的元素顺寻并不是固定的。Iterator是一个接口,有三个方法:
hasNext()判断是否有下一个元素,有的话返回true;
next()返回下一个元素,当第一使用时返回的是第一个元素;
remove()从迭代器指向的集合中删除返回的最后一个元素;
所以在遍历HashSet时可以用Iterator iter=hashset.iterator();来返回一个迭代器,并逐个元素使用。
2、TreeSet类实现了SortedSet,当然它还实现了其他的接口。Treeset对于要存放的元素要求更为严格,不仅仅只能存放不重复的元素,而且存放的元素类型必须相同哦。
对于上面的例子,Person类里如果不对toString重构的话会打出内存编号而不是字母。
在产生set2时,选用的是第三个构造方法,参数是PersonCmpare这个比较器,这样的话才能比较Person类,并对加入的元素排序。
3、ArrayList顾名思义,里面的元素是一个列表,它的具体实现形式是通过数组,不断的加入新元素会使底层代码不断的重新产生大小不一的数组来代替原先的数组,这样看起来就是数组的大小可变。Arraylist内的元素是有顺序的,而且元素也可以重复,这点和set不同。它的主要方法如下:
1、boolen add(), void add(int index,eelement),明显这两种方法一个是在末尾追加元素,另一个是在指定位置上加入元素,要注意,在指定位置上加入元素的时间开销比较大,尤其是元素个数较多时,由Arraylist底层实现方法显而易见。而后面要说的Linkedlist和这个实现方法不同,它的开销较小,因为LinkedList底层是链表实现的。
2、e get(int index)
3、e remove(int index),boolenremove(Object o)
4、e set(int index e element)用指定的元素代替原先的元素,返回的是以前的元素哦。
4、LinkedList和上面的ArrayList差不多啦
下面是两种方法的简单实例:
程序没什么好解释的,很简单。
5、Map有影射的意思,对于继承了Map的三个类HashMap,SortedMap,TreeMap,在放置元素时要放入一个Key主键,再放一个Value,比如对于HashMap,它的放入方法是put(Key,Value),通过主键即可查找到其影射的值。三个类的具体不同以后再做讨论,少年没时间了,装系统装了一上午,手贱,奶奶的。见下例。