java–什么是聚合的视图?版权声明

原创
小哥 3年前 (2022-10-28) 阅读数 16 #JAVA
文章标签 javajava教程

在使用 Guava 系列以及在阅读其文档时,我一直在读《观点》这个词。.

我一直在寻找一种解释,说明在这种情况下什么是观点。,以及是否使用番石榴以外的术语.这是经常使用的。 here .这个来自Guava的 type 有它的名字.

我的猜测是,集合的视图是具有相同数据但结构不同的另一个集合。;例如,当我从java.util.HashSet将条目添加到java.util.LinkedHashSet时,后者将是前者的观点.是那么回事吗?

有人可以将我连接到由接受的视图定义的链接。,如果有的话?

谢谢.

最佳答案

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

例如,Map的keySet()该视图可能具有以下实现:

class KeySet implements Set {
  private final Map map;

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

  ...
}

特别是,修改视图的支持对象时,在此处,Map将返回keySet() – 该视图反映了相同的变化.例如,如果你打电话给map.remove(key),那么keySet.contains(key)将返回false,不做任何其他事情.

或者,Arrays.asList(array)提供阵列。List视图.

String[] strings = {"a", "b", "c"};
List 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"

查看只是查看原始支持对象中数据的另一种方式-Arrays.asList允许您使用List API访问正常数组; Map.keySet()允许您访问地图的密钥。,就像它是一个完全普通的Set – 所有这些,而无需复制数据或创建另一个数据结构.

一般来说,使用视图而不是复制的优点是效率.例如,如果您有一个数组,你需要想办法拿到一份名单。,则您将不会创建新的ArrayList以及数据的整个副本-Arrays.asList该视图只需要一个额外的内存。,所有这些都是通过访问原始数组来实现的。List方法.

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除