java container

本文详细介绍了Java中的容器分类,包括Collection和Map的区别与联系,以及各自的不同实现类如ArrayList、LinkedList、HashSet、TreeSet、HashMap和TreeMap的特点。还介绍了HashCode的作用、Iterator的使用方式和如何根据需求选择合适的容器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java Container的分类图见附件1,简化分类图见附件2。

Container分类简介:

Container包括Collection和Map两种分类,其中Collection用来保存单个的Objects,Map以Key-Value的形式来保存Objects。Collection包括List和Set两种,List接口包括两个基本的实现类ArrayList和LinkedList。ArrayList允许随机的快速访问其中元素,但是Insert和Remove速度较慢;LinkedList访问其中元素的速度较慢,但是Insert和Remove相对于ArrayList来说较快。Set接口不允许其中有相等的元素(List允许duplicate elements),其包括两个基本的实现类HashSet和TreeSet。HashTable支持快速的查找元素(要求元素支持hashCode方法),其中的元素随机保存;TreeSet以一定的顺序保存元素,它实现SortedSet接口,均可以返回Comparator接口来确定其排序算法,元素通过实现Comparable接口来确定其间的顺序。Map接口以key-value的形式保存元素,Map中的key都是unique的,其包括两个实现类HashMap和TreeMap。HashMap是HashTable的替代品,它提供定时间的插入和查找元素;TreeMap中的key sets是以一定的顺序保存的,这和TreeSet是类似的,也可以返回Comparator接口来确定其key set的排序算法。

HashCode的作用:

HashCode是为了在HashSet里面更快的查找元素。HashSet在填充元素时候,会对object的hashcode进行一些归类处理,生成一系列的buckets(一般是能够控制在一定范围的)。然后把bucket作为数组的索引,每个数组元素保存一个List,将所有在此bucket内的元素填充入该List当中。当查找元素时候,只需要先根据元素的hashcode找到相应的索引,然后从索引指向的List当中依次查找该元素即可。设计hashcode需要考虑其的聚焦性,尽量减少hashcode的聚焦性,减少多个hashcode指向一个索引的情况,可以更好的提高HashSet的性能。

Iterator的说明:

Iterator是为Contanier提供了一个按照顺序依次取出Container元素的类。Iterator隐藏了取出元素机制和低层结构,程序员不需要知道低层到底是List还是Set还是Map,就可以从其中按照顺序取出元素。也正是因为如此,Iterator只提供了按单方向顺序取出元素。

工具类的说明:

Collections封装了一些常用的方法。包括对List的排序,取其中最大最小元素等等...

如何根据需求选择不同的实现类:

首先,Hashtable,Vector,Stack已经不被推荐使用,保留它们只是为了使遗留系统的代码不被破坏。所以这三个类可以忽略考虑。当使用List的时候,最好的方法是把ArrayList作为Default选择,当发现需要大量的Insertions和removals需求时改换LinkedList;使用Set的时候,如果需要有顺序的查找和取出元素,那么选择TreeSet,否则选择HashSet;使用Map的时候,HashMap用来更快的查找元素,而TreeMap允许按照一定顺序来根据key查找元素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值