声明linked-list二维数组是否有方法无需初始化全部元素?
实现方案
你可以用惰性初始化的逻辑实现需求,完全不需要提前初始化全部链表对象:
- 第一步仅声明二维数组结构,不需要填充初始值,以Java为例,声明语句为
LinkedList<String>[][] wordStorage = new LinkedList[26][26];,该操作执行后所有数组插槽默认是空引用,不会生成多余的链表实例,几乎没有额外内存开销。 - 存入单词时,先将首字母、第二个字母转换为0-25范围的下标,示例代码:
// 仅做小写字母示例,大写可先做归一化处理 int rowIndex = targetWord.charAt(0) - 'a'; int colIndex = targetWord.charAt(1) - 'a';
- 存入前先判断对应下标位置的插槽是否为空,仅为空时才初始化对应链表:
if (wordStorage[rowIndex][colIndex] == null) { wordStorage[rowIndex][colIndex] = new LinkedList<>(); } wordStorage[rowIndex][colIndex].add(targetWord);
- 读取、遍历数据时,先判断对应位置是否为空,为空则直接跳过即可。
如果你的实际使用场景里,用到的首字母+第二个字母组合远小于200个,也可以选择嵌套哈希表替代二维数组,外层哈希表键为首字母,内层哈希表键为第二个字母,值为对应链表,这种方案连空的数组插槽内存都可以省下来。不过26*26的二维数组本身内存占用极低,数组方案的读写速度更快,实现逻辑也更简单,是更优先的选择。
内容的提问来源于stack exchange,提问作者Shane Butler
相关产品推荐
相关产品推荐

