(家庭作业:)在这种情况下,我想使用array而不是arraylist。我有arraylist名称employee,我必须将它的数据插入到树中。我从文件中逐行加载数据。但是我想对employee使用array,而不是arraylist。我该怎么做?在这种情况下,有任何方法可以使用array而不是arraylist。下面的代码是我的arraylist employee示例代码。我想将list改为employee[]如何以数组的形式编写下面的函数。
public static void main(String[] args) {
List<Employee> employees = read("employees.txt");
BST bst = new BST();
for(Employee e : employees){
bst.insert(e);
}
}
public static List<Employee> read(String file) {
try {
List<Employee> employees = new ArrayList<>();
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while((line = reader.readLine()) != null ){
String[] arr = line.split("-");
Employee emp = new Employee();
emp.ccode = Integer.parseInt(arr[0]);
emp.cus_name = arr[1];
emp.phone = arr[2];
employees.add(emp);
}
return employees;
} catch (IOException ex) {
Logger.getLogger(TestMusic.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
6条答案
按热度按时间kzipqqlq1#
不给你任何代码(你自己做;-):
分析文件两次:
获取行数,根据行数创建数组
再次解析文件,填充数组
一些研究(关键词bufferedreader和array)也会对你有所帮助。
y53ybaqx2#
这种方法不是最好的,但可能会解决您的问题。用于<8的java版本。方法是解析文件以获得行数,创建employee数组,然后再次解析以获得所有单个employee的数据
daolsyd03#
您的要求不清楚在以下情况下您想做什么:
一行解析失败;
无法打开文件进行读取。
以下是一个解决方案(eww),如果无法解析文件,它将忽略不可解析的条目并返回空数组:
注意这个解决方案如何完全不使用中间列表;相反,它使用了Java8流api。
剩下要做的就是处理错误。。。这由你决定:)
p5fdfcr14#
猜测数组的大小,例如取文件的大小除以20(大约是您给出的示例中的行的大小)。然后读入数组,数行。如果在到达文件结尾之前数组已满,请分配一个大小为原来两倍的新数组,将旧数组中的所有内容复制到新数组中,然后用新数组替换旧数组,并以相同的方式继续操作,直到完成为止。您可以查看arraylist的源代码,看看它是如何完成的—基本上这就是arraylist在内部所做的。
6tdlim6h5#
如果要将arraylist转换为array,请使用以下代码:
z4bn682m6#
这就像是倒退了一步。java集合(例如list接口和arraylist实现)与“普通的旧”数组相比有许多优点。
阵列的唯一真正优势是减少了开销——但这只有在处理数百万或数十亿存储在容器中的事物时才是重要的。
所以真正的答案是:不要那样做。继续使用list/arraylist。
但如果您坚持这样做,那么您当然可以使用数组—但是您必须添加使arraylist更方便的部分:您必须提供代码,以便在达到数组大小限制时动态地“增长”数组。工作原理如下:
例如,从大小为100的初始数组开始
填充该数组时,可以跟踪“正在使用”的插槽数
当您的代码想要添加第101个元素时,您可以“增长”数组
成长作品作者:
创建一个新的数组,其容量类似于currentarray.length+100
使用system.arraycopy()将所有条目从旧数组移动到新数组