java容器类

发布时间:2014-10-22 13:38:34编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"java容器类",主要涉及到java容器类方面的内容,对于java容器类感兴趣的同学可以参考一下。

        每个编程语言都有其体系模块,而容器类就是其体系模块之一。 在java中的容器类其实就是数据结构在java中的具体应用,因此在java中,使用数据结构基本上就是使用容器类。java的容器类形成的容器类库是一个体系模块,我们可以通过该体系模块进行简洁记忆。         相对于数据结构的理论化来说,容器类更加注重实际应用,因此并不用过分追求数据结构的理论,而应掌握实际的容器类的整体使用。简单点说就是掌握容器类,然后必要时进行数据结构的扩展。         可以从名字组成进行特性记忆。如Set,List,Map这些一般用于说明主要特性。而Set,List,Map前面的名词(或形容词)其实是对他们的功能进行补充的用的,起装饰的作用。从她们的名字组成可以看出类特性的设计,从而理解方法的设计思路。List相当于数学上的列表,Set相当于数学上的集合,Map相当于数学上的映射(从数学的角度进行理解即可)。而对于装饰,一般就是使用Tree,Hash,Array,Byte等对Set,List,Map等进行功能装饰,形成诸如ArrayList,HashMap的类,当然还有一些较为特别的如Vector的类,虽然继承自List但是命名上由于Vector更适合,所以使用Vector。 (注意:List,Set都是继承自Collection,而Map自成一体。这主要是因为Map操作的是成对的键值对,方法上使用的是put()与get()。而List与Set则是使用的add()与get(),加上Iterator()得到的迭代器进行操作,同时Collection的方法都具有Iterator()方法进行相关操作。对于Collection与Map都具有equals()以及hashCode()方法,因为这是两个很有用的方法。但其实都是从Object继承来的。) (Collection集合,Map映射,List列表。LinkedLIst链表,ArrayList顺序结构动态数组类,Vector向量。HashMap哈希映射,Hashtable哈希表,SortedMap排序映射。SortedSet排序集,TreeSet树集,HashSet哈希集。LinkedList,ArrayList,是不同步的,Vector是同步的。HashMap是不同步的,Hashtable是同步的。)         整个java容器类的基础是容器接口而不是类,这样做的目的是使用相同的方法操作不同的实例,而不用关心具体的类是怎么样的。其中最重要的是Collection接口与Map接口。这两个接口使用最广的,大多数的容器类都是由这两个接口进行演化的。Collection类有两个重要的子接口,List,Set。这是两个最为关键的接口。List元素有序可重复,Set元素无序不可重复。而对于Set接口,为了实现不重复,需要实现比较,于是就使用了equals()进行比较。但是当数据太多时,注意比较很好资源,所以就使用了,哈希法(散列法)进行处理,使用hashCode()返回数据存储的物理地址,如果地址存在数据,就进行equals()比较,相同的就不存了,不相同的就散列在散列桶的其他地址。所以其实如果要覆盖equals()的话,hashCode()也要覆盖。Collection从Object继承了两个方法,分别是equals()与hashCode(),因此子接口LIst与Set也就拥有着两个方法了。         另外,关键接口Collection,List,Set,Map都有其自身的抽象类:AbstractCollection,AbstractList,AbstractSet,AbstractMap。这里的抽象类仅仅是将最基本的方法进行抽象,而对于使用这些基本方法的其他方法则是具体实现,这样就可以使得实现List,Set,Collection接口变得简单,因为不用实现所有的方法,这点与Listener与Adapter之间的关系很像,关键就在于可以仅仅编写自己想要的那部分功能。         同时还应注意:K键,V值,E代表Element,T代表Type泛型(java类),?是占位符,代表未确定类型,N代表Number数值类型。而泛型是其中尤为重要的概念,因为在编程时,泛型会被实现为具体的类(注意不能为基本类型),然后使用泛型的类会将该具体类作为操作单位进行实际操作。         Collection,List,Set与Map用于形成容器类体系。但是他们都是接口,实用性不高,所以在使用时使用的基本都是他们的子类。         List一共有三个实现类ArrayList,LinkedLIst,Vector。其中LinkedList有List所没有的方法用于专门操作表头和表尾元素,这也体现了链表的特性。Vector和ArrayList一样,都是通过数组实现的,但是Vector是同步的,而ArrayList不是。LinkedList也是不同步的。         Set的直接子类,常见使用的HashSet,SortedSet(接口),其他的直接子类较少用。TreeSet也是常用的Set的子类,但是不是直接子类。因此Set上,有HashSet,SortedSet,TreeSet要掌握。HashSet是基于HashMap实现的。TreeSet是利用Comparable接口进行排序得到树结构的Set。SortedSet是接口。         Map的直接子类是HashMap,Hashtable,SortedMap。HashSet与HashMap都是使用Hash算法进行的数据存储,只是HashSet将数据进行存储,而HashMap将键值对进行存储。SortedMap是接口。Hashtable是以键值对进行存储的,他是继承自陈旧的Dictionary类的,是同步的类,且键值都不允许出现null,使用Enumeration进行遍历,重要的是Hashtable直接使用对象的hashCode。HashMap是继承自AbstractMap的类,是不同步的,键值允许为null,使用Iterator进行遍历,而且重新计算hash值,并且用予代替求模。         而且应该明白,在Collection Frame中,并不是将集合对象进行存储的,而是将引用进行存储,最后利用引用指向数据。同时注意Hash算法其实是为了进行快速存取集合数据而被设计的,Hash算法是会浪费空间资源的。         至于Sorted装饰的SortedSet与SortedMap顾名思义就是为了分类,排序而存在的接口,其内部实现了Comparator。因此只要是sortedXX的的子类就可以实现排序。实例有:TreeSet。         Hash是一种算法,就是指数据结构中的散列,他作为查找方法,存储方法,应用于如HashSet,Hashtable等。Hash中确定对象是否相等使用的是equals(),相同的对象必然拥有一样的HashCode,但是相同的HashCode未必就是相同的对象,因为不同的对象可能经过f(x)计算(就是将计算出的值解释为存储地址)后可能具有相同的HashCode。相同HashCode的不同对象在散列桶里面是顺序存储的。散列要求的空间比实际所需的大,造成浪费,但是检索速度却很快。         链表是使用的节点概念的,就是说节点里面包含数据,下一个数据的指向,上一个数据的指向。而且链表在表头表尾操作上有实现方法。实际上链表与ListIterator很像,都是使用指向的,只是ListIterator没有节点概念,只是单纯的指向而没有数据。链表的实例有LinkedList。         树结构是数据结构中重要的概念,树结构是非线性结构,是数据元素(树结构中称为节点)按照分支关系组织的结构。一切具有层次关系的数据都可以使用树结构进行描述(注意描述树结构的深度,度,路径,层次,森林,以及树结构的遍历方法前序遍历,中序遍历,后序遍历)。树结构常见的有二叉树,二叉排序树等。其中二叉排序树左子树是向着越来越小的趋势延伸,右子树则是向着越来越大的趋势延伸的,就是说,左子树的值不能大于根节点值,右子树的值不能小于根节点的值(其实就是排序)。 容器类涉及到的知识点:1、集合框架(Collection Frame)是用于表示和操作集合的统一标准体系结构,任何体系框架都包含三部分:对外接口,接口实现,对集合运算的算法。同时应该注意集合架构提供两个实用的接口Comparable以及Comparator。同时提供了两个很实用的类Collections与Arrays。2、一个类是可排序的,则应该要实现Comparable接口(或者是Comparator接口)。这点在TreeSet上得到使用,因为虽然Set是无序的,但是Tree却是有序的因为需要Tree结构,所以就使用了Comparable接口。3、equals(),hashCode()方法对于使用Hash的类特别重要,因为这两个方法是实现Hash的必要方法。equals()用于比较两个对象是否相等,hashCode()用于得到存储地址。4、Iterator,ListIterator,Enumerattion都是用于遍历的,其中Iterator是从Object继承来的,最原始的类。List是改进版的Iterator,可实现前后遍历。Enumeration是从Dictionary那里继承来的,用于对Hashtable进行遍历用的类。5、其实在java的容器体系中还存在扩展的包,如Map与List就存在有不同的包对Map及List进行实现,这点是需要注意的,如java.util.Map与javax.swing.text.html.Map;         性能种类。根据特性进行筛选合适的类,用以操作数据,这当中涉及到各种性能的掌握,性能:1、所能容纳的空间。容器类并未限定容量大小,但是由于有内存限制所以其实是有容量限制的。2、进行操作所需要的时间,也就是效率问题。3、增删查改等常用操作。   (未完成) 性能掌握(未完成) 各数据结构(未完成) Hash,Tree,链表,array等概念需要深入了解(未完成) Collections,Arrays的使用(未完成) WeakHashMap,Dictionary(字典),queue,stack,红黑树,2-3-4树,视图等进行扩展时进行掌握。这里不面面俱到。(未完成)


上一篇:Mysql:is not allowed to connect to this MySQL server
下一篇:查询,删除表中重复的记录

相关文章

关键词: java容器类

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款