JAVA学习笔记整理六(类集框架)

来源:互联网 发布:税务查账软件 编辑:程序博客网 时间:2024/05/17 18:29

类集框架接口的具体特点




接口的继承关系



集合框架中的实现类

Collection接口

1.    此接口是单值存放的最大父类接口,可以向其中保存多个单值(单个的对象)数据,一般不直接使用,因为表示的操作意义不明确。

2.    使用了泛型的定义,在操作时必须指定具体的操作类型,以保证类集操作的安全性,避免发生ClassCastException异常

List接口

1.     ArrayList


2.     LinkedList:


3.     区别

    1)  我们可以将ArrayList看作是能够自动增长容量的数组,可以直接利用ArrayList的toArray()返回一个数组

    2)  ArrayList底层采用数组完成,而LinkedList则是以一般的双向链表(double-linked list)完成,其内每个对象除了数据本身外,还有两个引用,分别指向前一个元素和后一个元素

    3)  LinkedList在实现List接口的同时,还实现了Queue接口,采用“先进先出”的方式操作

   4) 如果我们经常在List的开始处增加元素,或者在List中进行插入和删除操作,我们应该使用LinkedList,否则的话,使用ArrayList将更加快速

Set接口

Set接口不能增加重复元素,实例无法像List接口那样可以进行双向输出。

1.     HashSet:散列的存放:不能存放重复元素,并且采用散列的存储方式,无序排列

2.     TreeSet:有序的存放:不能存放重复元素,有序排列,可以自定义类进行去重复并按照自己规定的顺序进行排序

3.     TreeSet实现了SorteSet接口(是 SorteMap 的 set 对应接口)

集合的输出

1.     迭代输出 Iterator(最常使用):是专门的迭代输出接口,由前向后单向输出。所谓的迭代输出接口就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取走

2.     双向迭代输出Listlterator:可以实现由后向前或者由前向后的双向输出(只有List接口才可以实现),若想要后向前输出,必须先完成由前向后的输出

3.     Foreach:增强型循环


Map:

Collection、Set、List接口都属于单值的操作,每次只能操作一个对象,而Map每次操作的是一对对象,Map的每个元素都用key→value的形式存储在集合中

1.     Map.Entry接口简介:是Map内部定义的一个接口,专门用来保存key→value的内容(实际上是将key→value的数据保存在Map.Entry的实例后,再在Map集合中插入一个个的Map.Entry的实例化对象)


2.     HashMap:无序存放,新的操作类,key不允许重复

3.     HashTable:无序存放,旧的操作类,key不允许重复(除了Hashtable可以同步和不允许使用null之外, Hashtable与HashMap类大致相同)


4.    TreeMap:可以排序的Map集合,按集合中的key排序,key不允许重复(一般使用的String类作为key,而String类已经实现了Comparable接口,所以不用再特意实现,而如果使用自定义的类作为key,则必须实现Comparable接口,否则会出现异常)

5.     WeekHashMap:弱引用,之前的子类都是强引用保存,即里面的内容不管是否使用都始终在集合里,而WeekHashMap则当利用“System.gc()”进行垃圾收集时,集合会自动清理暂时不用的数据


6.     Key可以重复的Map集合:IdentityHashMap

        只要key地址不是相等的,就可以添加进去而不被覆盖

Map接口使用的注意事项

1.     不能直接使用迭代输出Map中的全部内容(Map一般很少直接输出,只是作为查询使用,而Collection接口一般用来传递内容和输出)

   1)    使用Iterator输出(最标准的操作流程)

1>  将Map的实例通过entrySet方法变为Set接口对象

2>  通过Set接口实例化为Iterator实例化

3>  通过Iterator迭代输出,每个内容都是Map.Entry的对象

4>  通过Map.Entry进行key→value的分离

   2)    Foreach输出(将Map集合变为Set集合进行输出)


2.     直接使用非系统的类作为key

        如果使用的自定义的类表示Map中的value,则按照格式完成即可,但是,如果要使用一个自定义的对象表示Map中的key,则对象所在的类中一定要覆写equals()和hashCode()方法,否则无法找到对应的value(类似于treeSet处,需要一一进行比较)

其他集合类

1.     Stack类:栈,先进后出。

2.     属性类:Properties




0 0
原创粉丝点击