Java 替换类型为数据结构的arraylist中的值
这可能是一个非常简单的问题,但我仍然会问它 我的arraylist:Java 替换类型为数据结构的arraylist中的值,java,arraylist,Java,Arraylist,这可能是一个非常简单的问题,但我仍然会问它 我的arraylist: ArrayList<FileNameData> fileData; 集合方法 public void setFileName(String fName) { fileName = fName; } 我正在尝试将用户输入的文件名替换为数组中已有的文件名 我创建了以下方法 public void setFileName(int index, String fName) { fileData.set(i
ArrayList<FileNameData> fileData;
集合方法
public void setFileName(String fName) {
fileName = fName;
}
我正在尝试将用户输入的文件名替换为数组中已有的文件名
我创建了以下方法
public void setFileName(int index, String fName) {
fileData.set(index, setFileName(fName));
}
我知道获取文件名非常简单
String fName = fileData.get(index).getFileName();
我知道set方法需要索引和新值,但我不确定如何在set中找到setFileName方法 如果我没弄错,那么您需要修改存储在位置
索引中的对象:
public void setFileName(int index, String fName) {
fileData.get(index).setFileName(fName);
}
或者,再加上几行:
public void setFileName(int index, String fName) {
// get the fileNameData stored at position index
FileNameData fileNameData = fileData.get(index);
// set the new filename
fileNameData.setFileName(fName);
}
如果您试图从ArrayList中获取特定文件并更改文件名,则需要从列表中获取正确的元素
如果您知道旧文件的索引,则相当简单:
file = list.get(index);
file.setName(newName);
你可以使用的方法。为此,必须正确实现FileData
对象的and。假设文件名唯一标识文件:
在FileData类中
public boolean equals(Object other)
{
return other instanceof FileData
&& this.getFileName().equals(((FileData)other)getName());
}
public int hashCode()
{
return this.getFileName().hashCode();
}
然后,您可以找到具有给定名称的文件索引并对其进行更新:
FileData file = new FileData();
file.setName(oldName);
int index = list.indexOf(file);
file = list.get(index);
file.setName(newName);
如果我没弄错的话,你有两个类似这样的类:
class SomeClass {
ArrayList<FileNameData> fileData;
public SomeClass(){
fileData = new ArrayList<FileNameData>();
}
}
因此,您需要找到一种方法来获取存储当前文件名的索引
一旦有了索引,您就可以执行以下操作(应该在SomeClass
中执行),这样该类看起来就像:
class SomeClass {
ArrayList<FileNameData> fileData;
public SomeClass(){
fileData = new ArrayList<FileNameData>();
}
public void replaceFileNameAtIndex(int index, String fileName){
fileData.get(index).setFileName(fileName);
}
}
为已经存在的文件获取一个新名称并更新它?查找索引的循环是多余的。您只需要返回fileData.indexOf(file);
@Nivas确实如此,但我认为这样读起来更好(至少在您开始学习使用集合时更容易理解)。我不这么认为。您正在列表上循环,并且仍然调用indexOf
。这意味着indexOf
对于一个10长的列表会被调用10次。为什么要循环呢?只需调用indexOf
。一次。实际上这不是真的。indexOf()如果文件名彼此相等,则只调用一次。
。同意。但是当调用indexOf
时,文件名已经相等。因此您根本不需要调用indexOf
。file.getFileName().equals(文件名)
和fileData.indexOf(文件名)
是等价的语句。这两种语句都不需要。而且,如果看到ArrayList.indexOf
的函数,实际上其中有一个循环。因此,对于代码,您最终会在ArrayList
上循环两次,这根本不需要。
class FileNameData {
String fileName;
public FileNameData(TCComponentItemRevision rev, TCComponentDataset selectedDataset, String markUp, String fileName){ ... }
public void setFileName(String fName) {
fileName = fName;
}
public String getFileName() {
return fileName;
}
}
class SomeClass {
ArrayList<FileNameData> fileData;
public SomeClass(){
fileData = new ArrayList<FileNameData>();
}
public void replaceFileNameAtIndex(int index, String fileName){
fileData.get(index).setFileName(fileName);
}
}
public int findIndexOfFilleName(String fileName){
for (FileNameData file : fileData)
if (file.getFileName().equals(fileName))
return fileData.indexOf(file);
return -1; //or some other value indicating not found
}