发布于2021-10-08 08:52 阅读(1067) 评论(0) 点赞(29) 收藏(1)
我有一个叫做类Word
,其中每个实例有String
,ArrayList<Character>
和double
。假设这个类有 3 个实例。我想创建一个新的ArrayList<String>
,其中包含所有 3 个单词字符串。但是,字符串的顺序必须从其原始实例的双打的高到低。该项目的主要规定是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;
}
}
您需要实现的结果可以分为两个主要步骤:
Word
秒,其中哪些将放在另一个之前List
Word
s列表进行实际排序。Java 有一个名为Comparable
. 这个名字是不言自明的。当你在你的Word
类中实现这个接口时,你是在告诉 Java 这个类的实例可以相互比较。
public class Word implements Comparable<Word>{
当您在Word
类中编辑此行时,您的 IDE 可能会抱怨“缺少compareTo()
方法”。该compareTo()
方法是在Comparable
接口中定义的,它的工作是从 2 个实例中决定哪一个应该被视为“更大”(或者在我们的例子中,应该放在第一个List
)。
用法的一个例子是:"apple".compareTo("banana");
。如果第一个实例(“apple”)“更大”,则此方法调用应返回正数,如果第二个实例(“banana”)“更大”,则返回负数,如果两者具有相同的“值”,则返回零. 顺便说一下,Java 中 scompareTo()
实现的方法String
按字母顺序评估实例。
所以让我们compareTo()
为我们的Word
类实现我们的方法版本。
@Override
public int compareTo(Word anotherWord) {
if(this.percent > anotherWord.percent) {
return 1;
} else if (this.percent < anotherWord.percent) {
return -1;
} else {
return 0;
}
}
请记住,如果第一个实例大于第二个实例,则此实现将返回正值,反之则返回负值。
现在我们有了比较我们的 的方法Words
,我们可以继续进行排序部分。
互联网上有各种各样的排序算法。有些效率较低,有些则更容易实现。你可以在这里研究其中的一些。
对我来说,最简单的排序算法称为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
的降序排序percent
。
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/299649/52c113b1b32f91f23f74/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!