Java:插入/替换为特定大小的排序数组

时间:2012-10-31 06:20:03

标签: java insert binary-search-tree

所以我遍历BinaryTree,节点包含字符串以及字符串在读取文件时出现多次。我只是在寻找在阅读文件时出现最多的前10个单词,所以基本上我只是比较一个int值。

我的问题是我想找到一种方法来比较和插入一个新节点,如果他们的计数值更大,有效的方法。所以说 我有一棵树...

   5
  /  \
 3    10
/       \

1 15

假设数组大小只有3号。我从1开始,因为数组是空的,直到5,看起来像是在点击5 ...

[1],[3],[5]

当我达到10时,它比一切都要大,但我想保持它排序,所以我需要将3转换为1,5到3和10到5.我想知道是否有更有效的方法这样做然后在每个更高的数字后移动。它读取的文本文件超过10k +,所以我希望它尽可能快。

如果不同的数据结构对此更好,请告诉我。我正在考虑一个队列或链接列表,但我认为数组是浪费太少的空间,因为它只有10的大小。我是学生所以也要温柔:-x。

2 个答案:

答案 0 :(得分:1)

一种方法是使用几个数据结构。使用Map和Min-Heap的建议方法如下:

  • 当您从文件中读取单词时,请在哈希映射中保留其计数(word,word_count)。
  • 保持大小为10的最小堆。每当更新地图中的单词时,请增加其计数。现在将此计数与最小堆的顶部元素进行比较。如果word_count> value_at_top,然后替换top元素和heapify。
  • 完成从文件中读取后,此堆将包含堆中最常见的10个元素

答案 1 :(得分:0)

嗯,你总是可以把它扔进一个未排序的ArrayList并运行一个sort:

List<Node> myArrayList = new ArrayList<Node>();
//Arbitrarily add subtract, replace, etc.
Collections.sort(myArrayList);

这是我的建议!