问题描述
|
如果我有一个无序的字符数组,如何获得唯一元素?
解决方法
单线:
Set<Character> uniqueChars = new HashSet<Character>(Arrays.asList(array));
(the1ѭ必须是Character[]
而不是char[]
。否则,您必须将其转换为包装器数组)
请注意,如果这是家庭作业,则需要一种更具算法性的方法来表明您了解自己在做什么。上述解决方案可能不适用。但是这是它的工作方式:
数组变成List
。这是O(1)
,因为阵列仅支持新的不可修改的列表。这样做是为了使数组可以符合List
接口,这是HashSet
构造函数所要求的
HashSet
是由HashMap
(哈希表)支持的集合。它计算键的哈希值,并将其存储在index = hash下的内部数组中。因此查找为O(1)。
HashSet
构造函数仅对传递的the4ѭ进行迭代,并为每个项目调用add(..)
。相同的项目在集合中不允许两次(根据定义,集合不允许重复)。之所以如此,是因为该项目的哈希值与现有哈希值相同,所以新哈希值将替换旧哈希值。请注意,允许使用具有相同散列的项目,但不允许同时使用相同的项目(.equals(..)
)