Java 我该如何优化此功能;排序;?

Java 我该如何优化此功能;排序;?,java,arrays,sorting,linked-list,nested-loops,Java,Arrays,Sorting,Linked List,Nested Loops,因此,我正在编写一个算法,它接收一个排序字符串数组,并用字符串填充一个单独用户定义的链表数组。每个链表都是一个字谜列表。例如,列表可能包含“car”和“arc”,因为两者都包含字母a、c和r 数组的每个标头必须按原始列表的字母顺序排列。所以基本上,如果我有输入{“arc”,“bed”,“car”,“deb”,“木琴”},我会得到输出: 电弧,汽车 床,黛布 木琴 如何实现这一点是通过使用嵌套for循环实现的。外循环取列表的第i个元素,或“key”,内循环取链表数组的第j个元素。如果第j个列表的标

因此,我正在编写一个算法,它接收一个排序字符串数组,并用字符串填充一个单独用户定义的链表数组。每个链表都是一个字谜列表。例如,列表可能包含“car”和“arc”,因为两者都包含字母a、c和r 数组的每个标头必须按原始列表的字母顺序排列。所以基本上,如果我有输入{“arc”,“bed”,“car”,“deb”,“木琴”},我会得到输出: 电弧,汽车 床,黛布 木琴 如何实现这一点是通过使用嵌套for循环实现的。外循环取列表的第i个元素,或“key”,内循环取链表数组的第j个元素。如果第j个列表的标题为null,则立即将键放入j并断开。如果报头不包含null,并且如果该键是报头的字谜,则会将其添加到列表中。我的链表自动排序。 现在,这对于小输入非常有效。但是对于非常大的输入,比如n=15000,完成嵌套循环需要花费2.5分钟,这需要花费太长的时间。我认为这与我的LinkedList方法无关,因为其中没有嵌套循环。我真的可以优化它吗?最好是比O(n^2)更好的东西。也许把输入数组分成两部分,然后进行递归调用

//receives a lexicographically sorted string array called "input"
//some other code
//"sortAlphabetical(String)" is a sorting algorithm which lexicographically sorts a string. Used to compare two strings, uses a quick sort and is very fast... doesn't appear to be the issue.


        ArrayList<LinkedList> theList = new ArrayList<>();  //creates new linked lists for elements of the arraylist
        for(int k = 0; k < input.length; k++) {
            theList.add(new LinkedList());
        }
        int numberOfLists = 0;                      //tracks the number of non empty lists created, not relevant
        long startTime = System.nanoTime();         //begin tracking time
        for(int i = 0; i < input.length; i++) {
            String theKey = input[i];
            for(int j = 0; j < theList.size(); j++) {

                if(theList.get(j).getHeadM() != null) {

                    if(sortAlphabetical(theList.get(j).getHeadM()).equals(sortAlphabetical(theKey))) {
                        theList.get(j).add(theKey);
                        break;
                    }
                }
                else if(theList.get(j).getHeadM() == null){

                    theList.get(j).add(theKey);
                    numberOfLists++;
                    break;
                }
            }
        }

        elapsed = System.nanoTime() - startTime;
        System.out.println("The nested for loops in sortList ran. It took " + elapsed + " nanoseconds.");
//more code
大约是120秒,或者两分钟。如有任何帮助或建议,将不胜感激。如果我需要添加更多信息,请告诉我。 编辑:我不允许使用Java库排序,如哈希集等。

for(int i=0;ifor(int i = 0; i < input.length; i++) {
String theKey = input[i];
for(int j = 0; j < theList.size(); j++) {
字符串theKey=input[i]; 对于(int j=0;j 通过考虑获取条件表达式右侧的需要,可以在for循环中获得更好的性能

int inputLength = input.length;
int theListSize = theList.size();
for(int i = 0; i < inputLength; i++) {
String theKey = input[i];
for(int j = 0; j < theListSize; j++) {
int inputLength=input.length;
int-theListSize=theList.size();
for(int i=0;i

这将在检查条件时每次迭代都保存一个方法调用。

我认为优化此方法的方法是找到一个不同的算法。从我看到的情况来看,您并不是在这里进行排序。您试图完成什么?请注意,像“接收一个按字典排序的字符串数组,称为“输入”可以通过代码直接传达。类似于
void sortList(列表输入)
或任何实际签名已经告诉了我们很多。当然,您假设输入列表已经排序的注释也将有助于澄清。@code学徒是的,这就是为什么我在引号中添加排序,因为我真的不知道该称之为什么。Im“排序”LinkedList列表符合我所述的要求。我希望获得更好的运行时间,因为2分钟似乎太长了,即使对于15000个字符也是如此。我希望帮助找到更好的方法来实现与嵌套for循环相同的效果,但不使用嵌套循环,因为它们给出了O(n^2)运行时间。数组的每个标头必须按原始列表的字母顺序排列,这到底是什么意思。它需要按字母顺序或原始顺序排列。您的示例输入很不幸,因为它无法区分这一点。例如,如果输入是
{“car”、“bed”、“xylophone”,那么输出会是什么,“arc”,“deb”}
?@Bohemian正如我所提到的,原始列表按字母顺序排序。假设我们逐行打印出链接列表的数组。每个“行”的第一个单词是每个列表的标题,该行由原始列表中的所有单词组成,这些单词是标题的一个拼音。标题,或每个“第一个单词”从上到下看,每一行都必须按字母顺序排列。希望这能澄清问题。
int inputLength = input.length;
int theListSize = theList.size();
for(int i = 0; i < inputLength; i++) {
String theKey = input[i];
for(int j = 0; j < theListSize; j++) {