日期:2014-05-20  浏览次数:20787 次

我该用哪个容器类?
哪位知道有没有这样的容器来能满足我如下的需求?

需要存储的元素都是自己定义的类的对象,容器里的对象不能重复。
容器里的元素都有自己的编号,通过对象可以拿到自己的编号,也可以通过编号找到这个元素。

有满足这个要求的容器类吗?

------解决方案--------------------
map本身不能保证value唯一.
用set.
至于编号,每个容器都有编号,如果你的key不是数值类型,再用map吧

Set(interface): 存入Set的每个元素必须是唯一的,因为Set不保存重复元素。加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。

HashSet: 为快速查找而设计的Set。存入HashSet的对象必须定义hashCode()。

TreeSet: 保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。

LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计的;TreeSet采用红黑树的数据结构进行排序元素;LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。需要注重的是,生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并定义compareTo()方法。