1

我有一个清单如下

List<Summary> summary;

Summary {
    int key;
    String value1;
    String value2;
}

java(或任何其他实用程序库)中有没有一种方法可以替换变量 value1 中所有出现的字符串“String1”而不必遍历列表?

4

5 回答 5

7

循环列表是不可避免的,因此您或某些第三方库必须进行循环。真的有那么难吗:

for (Summary s : summary)
    if (s.value1.equals("String1"))
        s.value1 = "...";

? :)

于 2012-06-07T07:54:19.870 回答
3

也许您可以使用一个允许您在没有循环的情况下使用它的库,问题是在低级别编译器必须使用类似循环的东西才能做到这一点。我认为您将直接或间接地使用循环。

因此,出于这个原因,如果在代码中使用循环,您没有任何问题。

对不起我的英语,我希望你能理解所有。

于 2012-06-07T08:00:36.370 回答
1

您可以添加一个方法来按对象部分查找:

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;
    }
}
于 2012-06-07T08:43:42.117 回答
0

TreeSet您可以通过使用, 将value1值作为键,将Summary对象作为值来避免一些循环 - 以丢失列表排序为代价。然后你可以做一个二分搜索来找到所有匹配的条目。使用散列的集合将具有类似的权衡和收益。

否则,正如其他人所说,循环是不可避免的。您可以进行的唯一优化是在条目进入列表时对其进行计数,以便您知道何时找到它们,这样您就可以停止循环。

但请记住,过早优化是万恶之源。:)

于 2012-06-07T08:21:24.693 回答
0

不,你不能,Loopinvetible。但是你可以优化它很多领域,比如,,selecting loop等等how do you find the string and replacing it

于 2012-06-07T08:06:39.187 回答