我有一个10000行的数据文件,每行“lastName,firstName middleName social security”,我想用可比较的界面对其进行排序,其中比较基于名称(last,first middle);如果最后,第一和中间名称相同,则使用社会保障作为该记录的辅助排序字段。 我的问题是我正在将每个名称读入一个单独的数组,因此我无法执行上述任务。下面是我如何阅读文件和排序方法的示例。
{ while(fileScanner.hasNextLine())
{
//Each String in the line of the data file is read into an array
Scanner lineScanner = new Scanner (fileScanner.nextLine());
lastName [i] = lineScanner.next();
firstName [i] = lineScanner.next();
middleName [i] = lineScanner.next();
id [i] = lineScanner.next();
lastName[i] = lastName[i].substring(0, lastName[i].indexOf(','));
i++
}
Sorts.selectionSort(lastName, firstName, middleName, id);
}
//排序方法
public static void selectionSort (Object [] x, Object [] y, Object [] z, Object [] a)
{
// Make [0 ... i] sorted and <= x [i + 1] ...x [x.length -1]:
for (int i = 0; i < x.length -1; i++)
{
int pos = i;
for (int k = i + 1; k < x.length; k++)
if (((Comparable)x [k]).compareTo(x [pos]) < 0)
pos = k;
swap (x, i, pos);
System.out.println(x[i]);
}
for (int j = 0; j < y.length -1; j++)
{
int pos2 = j;
for (int k = j + 1; k < y.length; k++)
if (((Comparable)y [k]).compareTo(y [pos2]) < 0)
pos2 = k;
swap (y, j, pos2);
System.out.println(y[j]);
}
for (int m = 0; m < z.length -1; m++)
{
int pos3 = m;
for (int k = m + 1; k < y.length; k++)
if (((Comparable)z [k]).compareTo(z [pos3]) < 0)
pos3 = m;
swap (y, m, pos3);
//System.out.println(z[m]);
}
for (int l = 0; l < a.length -1; l++)
{
int pos4 = l;
for (int k = l + 1; k < y.length; k++)
if (((Comparable)a [k]).compareTo(a [pos4]) < 0)
pos4 = l;
swap (y, l, pos4);
System.out.println(a[l]);
}
}
答案 0 :(得分:2)
您正在使用java,因此请停止使用类似C的结构。使用属性firstName,lastName,middleName,ssn定义对象。为每个人创建一个新对象并将其存储在List(可能是LinkedList或ArrayList)中。
覆盖对象上的equals和hashcode方法。
使用Collections.sort()对列表进行排序。
答案 1 :(得分:0)
创建一个具有名字,姓氏和社会安全号的Person类,在读取输入时,创建Person类的实例并将它们放在ArrayList中。然后你不必担心有多个数组。