java - 将边添加到字符串和 ArrayList 的哈希表
问题描述
我正在使用哈希表制作邻接列表。一切正常,但我现在要做的是减少内存的使用。
这些是我的数据类型。Word是我自己的类,比字符串节省更多内存:
static private Hashtable<Word, ArrayList<Word>> wordlist;
static private Hashtable<Word, Word> wordlist2;
我阅读了一个单词文件,并将该单词添加到我的单词列表以及我的第二个单词列表中:
static public void Read
.....
wordlist.put(word, new ArrayList<Word>());
wordlist2.put(word,word);
最后,我将边缘添加到我的单词表中:
static public void generateEdges(){
...
wordlist.get(word).add(wordlist2.get(newword));{
理想情况下,我会简单地说 wordlist.get(word).add(newword); 所以我根本不必使用 wordlist2。但我猜这不起作用的原因是因为 wordlist 有一个 ArrayList。有人能想到任何替代方法,这样我就不必使用 wordlist2 了吗?
谢谢!
编辑:完整的 generateEdges():
static public void generateEdges(){
for(Word word : list.keySet()){
Word newword = new Word(Arrays.copyOf(word.charAt, wordLength));
char origChar = word.charAt[0];
int origPos = 0;
for(int i = 0; i < wordLength; i++){
newword.charAt[origPos] = origChar;
origChar = word.charAt[i];
origPos = i;
for (int c = 0; c < alphabet.length; c++){
if (alphabet[c] != word.charAt[i]) {
newword.charAt[i] = alphabet[c];
if (Contains(newword) != null)
wordlist.get(word).add(wordlist2.get(newword));
}}}}}
获取单词边缘的方法:
static public ArrayList<Word> getEdges(Word word){
return wordlist.get(word);
}
解决方案
推荐阅读
- r - 根据模式从字符串创建子字符串,并将模式保留在子字符串中
- php - 将base64图像流转换为图像文件但为空白
- mysql - 如何在 MySQL 中查看全文索引的索引内容?
- javascript - 使用 JavaScript new Image() 加载外部 .svg,然后更改其内容
- php - $image 变量在文件上传 php 时保持为空
- python - 在 Python 中跨数据帧搜索和替换匹配值
- c# - 有没有办法在 C# 中获取方法的所有可能返回值?
- excel - 在另一张纸上显示数据
- ip - Drupal 8系统中如何通过ip过滤隐藏/不显示特定节点字段
- php - 将以下带索引的数组转换为字符串