用于字符串的 Java 存储桶排序程序



我遇到的主要问题是弄清楚如何将特定的字符串传递给存储桶类以将每个字符串分隔到各自的存储桶中。这是为了一个任务,我一直被卡住了。我不需要解决方案,只需要一些帮助来为我指明正确的方向。

注意:我必须在存储桶类中使用存储桶数组列表和链接列表

import java.util.*;
import java.io.*;
public class Bucket {
private char minInitial;
private char maxInitial;
private LinkedList<String> list;
public Bucket (char min, char max) {
minInitial = min;
maxInitial = max;
list = new LinkedList<String>();
}
public static void main (String args[]) {
/* There are usually 8 for the entire alphabet because letters like c and s have more words for them than others */
ArrayList<Bucket> buckets = new ArrayList<>(8);
buckets.add(new Bucket('a', 'b'));
buckets.add(new Bucket('c', 'c'));
buckets.add(new Bucket('d', 'f'));
buckets.add(new Bucket('g', 'k'));
buckets.add(new Bucket('l', 'o'));
buckets.add(new Bucket('p', 'r'));
buckets.add(new Bucket('s', 's'));
buckets.add(new Bucket('t', 'z'));

File inFile;
PrintWriter outFile;
try {
inFile = new File("input.txt");//input.txt file has the words sepepatated by comma "cat,dog,boy,bye"
String path = inFile.getAbsolutePath();
//outFile = new PrintWriter("output.txt");

System.out.println("File Name:  "+ inFile +  "File Path: " + path);
//System.out.println("File Name: " + outFile);
Scanner fileScan = new Scanner(inFile);
String inputFile="";
while (fileScan.hasNext()) {
inputFile = fileScan.next();
System.out.println(inputFile);
}

String arrayString[] = inputFile.split(",");
Arrays.sort(arrayString); //sorts the strings alphabetically
for (int i =0; i<arrayString.length; i++) {
System.out.println("List elem " + i + ": " +arrayString[i]);
//traverses every element
}
System.out.println(Arrays.toString(arrayString));

List listString = Arrays.asList(arrayString);
System.out.println(listString);

}
catch (FileNotFoundException e) {
System.out.println("! ! ! File Not Found ! ! !");
e.printStackTrace();
}
}
}

如果您使用的是 Java 8,您可以执行以下操作将单词添加到相应的存储桶中:

Arrays.stream(arrayString)
.forEach(word -> buckets.stream()
.filter(bucket -> bucket.minInitial <= word.charAt(0) && word.charAt(0) <= bucket.maxInitial)
.findFirst().ifPresent(bucket -> bucket.list.add(word)));

我不建议在桶中混合字母。 你不应该像以前那样做任何排序:

Arrays.sort(arrayString(;//按字母顺序排序字符串

简单算法:
1.求最长字符串的长度(O(n((
2.从上面的长度开始,往回走,在每次迭代中将字符串放入桶中(如桶对数字的排序((O(长度* n((

我没有在这里放任何代码,因为这是为了分配

最新更新