有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

因此,我正在遍历一个二进制树,节点包含字符串,以及字符串在读取文件时是否多次出现。我只查找在读取文件时出现最多的前10个单词,所以本质上我只是比较一个int值

我的问题是,如果新节点的计数值更大,我试图找到一种有效的方法来比较和插入新节点。这么说 我有一棵树和

   5
  /  \
 3    10
/       \

115

假设数组大小仅为3。我从1开始,因为数组在5之前是空的,所以它在命中5之后看起来会是空的

[1]、[3]、[5]

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

如果一个不同的数据结构会更好,请让我知道。我想使用队列或linkedlist,但我认为数组浪费的空间更少,因为它的大小只有10。我是一名学生,所以也要温柔


共 (2) 个答案

  1. # 1 楼答案

    嗯,你可以把它放入一个未排序的ArrayList并运行排序:

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

    这是我的建议

  2. # 2 楼答案

    一种方法是使用两种数据结构。建议使用映射和最小堆的方法如下:

    • 从文件中读取单词时,请在哈希映射中保持其计数(word,word_count)
    • 保持最小堆大小为10。每当你更新地图上的一个单词时,增加它的数量。现在将此计数与最小堆的顶部元素进行比较。如果单词计数>;在_top处对_进行赋值,然后替换top元素并进行heapify
    • 一旦从文件中读取完毕,这个堆将包含堆中最频繁的前10个元素