gpt4 book ai didi

Java:如何在不使用 Sort() 的情况下基于自定义对象 ArrayList 创建排序字符串 ArrayList

转载 作者:行者123 更新时间:2023-12-03 23:05:31 27 4
gpt4 key购买 nike

我有一个名为 Word 的类(class)其中每个实例都有 String , ArrayList<Character> ,以及 double 。假设这个类有 3 个实例。我想创建一个新的 ArrayList<String>其中包含所有 3 个单词串。然而,字符串的顺序必须从原始实例的 double 的高到低。本项目的主要规定是Collections.sort方法无法使用。请查看下面的代码,并告诉我您是否能想到一种编写此循环的方法(需要一个循环,因为实际上有 +50,000 个单词):


import java.awt.List;
import java.util.ArrayList;
import java.util.Arrays;


public class WordRecommender {

String fileName;

public WordRecommender(String fileName) {
this.fileName = fileName;
}

public static void main(String[] args) {

ArrayList<Word> objectArray = new ArrayList<Word>();

objectArray.add(new Word("people", null ,0.8));
objectArray.add(new Word("dogs", null ,0.4));
objectArray.add(new Word("cats", null ,0.6));

ArrayList<String> outputArray = new ArrayList<String>();

for (int i = 0; i < finalArray.size(); i++) {
// code here to find the value of each double and place the
// associated strings into output Array from highest to lowest
}

// ideal outputArray order = ["people", "cats", "dogs"]

}
import java.util.ArrayList;

public class Word {

String wordName;
ArrayList<Character> uniqueLetters;
double percent;

public Word(String string, double percent) {
ArrayList<Character> tempArray = new ArrayList<Character>();

for (int i = 0; i < string.length(); i++) {
tempArray.add(string.charAt(i));
}

this.wordName = string;
this.uniqueLetters = tempArray;
this.percent = percent;
}

}

最佳答案

您需要实现的结果可以分为两个主要步骤:

  1. 描述如何在给定 2 个 Word 的情况下将其中哪个单词放在列表中另一个单词的前面
  2. 使用比较方法对 Word 列表进行实际排序。

第 1 步:我们如何决定哪个单词排在第一位?

Java 有一个名为Comparable 的接口(interface)。这个名字很不言自明。当您在 Word 类中实现此接口(interface)时,您就是在告诉 Java 该类的实例可以相互比较。

public class Word implements Comparable<Word>{

当您在 Word 类中编辑此行时,您的 IDE 可能会提示“缺少 compareTo() 方法”。 compareTo() 方法是在 Comparable 接口(interface)中定义的,它的工作是从 2 个实例中决定哪一个应该被视为“更大”(或者在我们的例子中,应该放在列表的第一位)。

用法示例为:"apple".compareTo("banana");。如果第一个实例(“苹果”)“较大”,则此方法调用应返回正数;如果第二个实例(“香蕉”)“较大”,则此方法调用应返回负数;如果两者具有相同的“值”,则此方法调用应返回零。顺便说一下,Java 中 String 实现的 compareTo() 方法按字母顺序计算实例。

因此,让我们为 Word 类实现我们版本的 compareTo() 方法。

@Override
public int compareTo(Word anotherWord) {
if(this.percent > anotherWord.percent) {
return 1;
} else if (this.percent < anotherWord.percent) {
return -1;
} else {
return 0;
}
}

请记住,如果第一个实例大于第二个实例,则此实现将返回正值,反之则返回负值。

现在我们有了比较单词的方法,我们可以继续进行排序部分。

第 2 步:排序算法

互联网上有各种各样的排序算法。有些效率较低,有些则更容易实现。您可以研究其中一些 here .

对我来说,最简单的排序算法叫做 BubbleSort 。但效率不是很高。

ArrayList<Word> objectArray = new ArrayList<Word>();

objectArray.add(new Word("people", 0.8));
objectArray.add(new Word("dogs", 0.4));
objectArray.add(new Word("cats", 0.6));

for(int i = 0; i < objectArray.size() - 1; i++) {
for(int j = 0; j < objectArray.size() - i - 1; j++) {
// Remember: a compareTo() call returning a negative number
// means that the first instance is smaller than the second.
if(objectArray.get(j).compareTo(objectArray.get(j + 1)) < 0) {
Word auxiliary = objectArray.get(j);
objectArray.set(j, objectArray.get(j + 1));
objectArray.set(j + 1, auxiliary);
}
}
}

这两个嵌套的for循环将以百分比的降序对objectArray进行排序。

关于Java:如何在不使用 Sort() 的情况下基于自定义对象 ArrayList 创建排序字符串 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60479410/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com