我有一个清单如下
List<Summary> summary;
Summary {
int key;
String value1;
String value2;
}
java(或任何其他实用程序库)中有没有一种方法可以替换变量 value1 中所有出现的字符串“String1”而不必遍历列表?
我有一个清单如下
List<Summary> summary;
Summary {
int key;
String value1;
String value2;
}
java(或任何其他实用程序库)中有没有一种方法可以替换变量 value1 中所有出现的字符串“String1”而不必遍历列表?
循环列表是不可避免的,因此您或某些第三方库必须进行循环。真的有那么难吗:
for (Summary s : summary)
if (s.value1.equals("String1"))
s.value1 = "...";
? :)
也许您可以使用一个允许您在没有循环的情况下使用它的库,问题是在低级别编译器必须使用类似循环的东西才能做到这一点。我认为您将直接或间接地使用循环。
因此,出于这个原因,如果在代码中使用循环,您没有任何问题。
对不起我的英语,我希望你能理解所有。
您可以添加一个方法来按对象部分查找:
public class ListOfString {
public static void main(String[] args) {
List<Model> models = new ArrayList<>();
for(int i = 0 ; i < 5; i++) {
Model model = new Model();
model.setStr("String"+i);
models.add(model);
}
Model temp = new Model();
temp.setStr("String1");
System.out.println(containsObjectPart(temp, models));
}
// This method just a prototype, you can modify as you like...
private static boolean containsObjectPart(Model obj, List<Model> models) {
for(Model model : models) {
if(model.getStr().equals(obj.getStr()))
return true;
}
return false;
}
}
class Model {
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
TreeSet
您可以通过使用, 将value1
值作为键,将Summary
对象作为值来避免一些循环 - 以丢失列表排序为代价。然后你可以做一个二分搜索来找到所有匹配的条目。使用散列的集合将具有类似的权衡和收益。
否则,正如其他人所说,循环是不可避免的。您可以进行的唯一优化是在条目进入列表时对其进行计数,以便您知道何时找到它们,这样您就可以停止循环。
但请记住,过早优化是万恶之源。:)
不,你不能,Loop
是invetible
。但是你可以优化它很多领域,比如,,selecting loop
等等how do you find the string and replacing it
。