在Java中,容器主要包括:数组(Array)、集合(Collection)和映射(Map)三种。
(2)集合Collection:是一个接口类,包括List、Set、Queue等子接口,其具体的实现类可以用来保存多个元素。这里只讨论常用的子接口List和Set的常用实现类。常用的List实现类有ArrayList、Vector和LinkedList等,常用的Set实现类有HashSet、LinkedHashSet和TreeSet等。需要注意的是,List和Set有着很大的不同,主要包括是否允许元素重复和是否维护元素的次序。
(3)映射Map:保存相关联的键值对。其具体的实现类可以将键映射到值,根据键得到值,因此,一个映射不能包含重复的键,但是允许有重复的值,每个键最多只能映射到一个值。 常见的Map实现类有HashMap、Hashtable、LinkedHashMap和TreeMap等。
为了讨论的方便,下面以Array,List、Set、Map为分类来讨论这几种容器的使用特点。
(1)Array:数组的使用很直接,主要是根据下表来获取其元素。其特点就是一旦生成,其容量不能改变,并且每个元素之间不允许有“空隙”。其使用实例可以参考电子工业出版社“宝典”系列之《Java JDK 实例宝典》(夏先波 编着),个人感觉这本书写得不错,给出了许多JDK类库的具体使用实例,代码的注释也比较详细,很适合初学者入门学习使用,如果看Java Doc 还是有不明白的地方,也可以参考此书:)
(2)List:可用来存放多个元素,能够自动扩充容量,能够维护元素的次序,并且允许元素重复。
(2.1)ArrayList类:最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速的随机访问,但是要从ArrayList的中间位置插入或者删除 元素时,需要对数组进行复制、移动,代价比较高,因此,ArrayList适合随机查找和遍历,不适合插入和删除。
(2.2)Vector类:同ArrayList一样,其内部也是通过数组实现的,不同的是,Vector支持线程的同步,能够避免多线程同时写而引起的不一致,但是实现线程的同步需要很高的代价,因此访问Vector比ArrayList慢。
(2.3)LinkedList类:见其名,该类与链表肯定有关系:)该类的内部是通过链表来实现的,很适合数据的动态插入和删除,但是随即访问和遍历的速度比较慢。此外,该类还提供了List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当作堆栈、队列和双向队列使用。
(3)Set:可用来存放多个元素,但是不允许元素重复(即不保存重复元素),也不能够维护元素的次序。很直观,联想一下数学中的集合的概念就很好理解了。此外,需要注意的是,加入Set的元素必须定义equals()方法以确保对象的唯一性,如String对象。
(3.1) HashSet类:采用散列函数对元素进行排序,是专门为快速查询而设计的存入HashSet的对象必须定义hashCode()方法。
(3.2)TreeSet类:采用红黑树的数据结构进行排序元素,使用它可以从Set中提取有序的序列。
(3.3) LinkedHashSet类:内部使用散列以加快查询速度,同时使用链表维护元素的插入次序,在使用迭代器遍历时,会按插入次序显示结果。
(4)Map:可以用来存放相关联的键值对,根据键得到值。常见的Map实现类有HashMap、Hashtable、LinkedHashMap和TreeMap.
(4.1)HashMap类:一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,但不支持线程同步。HashMap最多允许一条记录的键为null,但是允许多条记录的值为null.
(4.2)Hashtable类:与HashMap类似,但是它不允许记录的键或者值为null,支持线程同步,因而Hashtable在写入数据时会很慢。
(4.3)LinkedHashMap类:保存了记录的插入顺序,在用Iterator遍历它时,先得到的记录肯定时先插入的,在遍历的时候比HashMap慢。
(4.4)TreeMap类:能够把它保存的记录根据键排序,默认为升序排列。当用Iterator遍历它时,得到的记录是排过序的记录。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- Java环境安装配置 (6059篇文章)
- Java编程开发手册 (8769篇文章)
- Java的类 (961篇文章)
- Java远程通讯的6种可选技术及原理 (279次浏览)
- struts2 + spring + hibernate 实现CRUD (217次浏览)
- 初学者对Hibernate的学习方法 (168次浏览)
- MyEclipse搞定hibernate的web应用 (104次浏览)
- 多动鼠标少动脑,Java报表工具的简约之美 (92次浏览)
- 多种计时器的比较与分析 (90次浏览)
- 没有父类的Java Class是如何从Object继承的 (88次浏览)
- JavaOne大会精彩爆棚 JavaFX成热点 (83次浏览)
- Java深度历险小记 (83次浏览)
- Java基础—异常处理总结 (73次浏览)



