gpt4 book ai didi

java - 什么是 Collection View ?

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:12 24 4
gpt4 key购买 nike

在使用 Guava 时,我一直在阅读术语查看 几次集合并阅读其文档。

我一直在寻找关于 View 在这种情况下是什么以及它是否是在 Guava 之外使用的术语的解释。它经常被使用here .这type来自 Guava 的名称中有 view

我的猜测是,一个集合的 View 是另一个具有相同数据但结构不同的集合;例如,当我将 java.util.HashSet 中的条目添加到 java.util.LinkedHashSet 时,后者将是前者的 View 。对吗?

有人可以给我一个公认的 View 定义的链接吗?

谢谢。

最佳答案

另一个对象的 View 根本不包含它自己的数据。它的所有操作都是根据对另一个对象的操作来实现的。

例如,MapkeySet() View 可能有如下所示的实现:

class KeySet implements Set<K> {
private final Map<K, V> map;

public boolean contains(Object o) {
return map.containsKey(o);
}

...
}

特别是,每当您修改 View 的支持对象时,Map 支持 keySet() -- View 反射(reflect)了同样的变化。例如,如果您调用 map.remove(key),则 keySet.contains(key) 将返回 false,您无需执行任何操作否则。

或者,Arrays.asList(array) 提供该数组的 List View 。

String[] strings = {"a", "b", "c"};
List<String> list = Arrays.asList(strings);
System.out.println(list.get(0)); // "a"
strings[0] = "d";
System.out.println(list.get(0)); // "d"
list.set(0, "e");
System.out.println(strings[0]); // "e"

View 只是查看原始支持对象中数据的另一种方式 -- Arrays.asList 允许您使用 List API 访问普通数组; Map.keySet() 允许您访问 Map 的键,就好像它是一个非常普通的 Set -- 所有没有 复制数据或创建另一个数据结构。

一般来说,用 View 代替复制的好处就是效率。例如,如果您有一个数组,并且需要将它传递给采用 List 的方法,那么您并不是在创建一个新的 ArrayList 和该数组的完整副本数据 -- Arrays.asList View 仅占用常量额外内存,并且仅通过访问原始数组来实现所有 List 方法。

关于java - 什么是 Collection View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18902484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com