java – 什么是集合的视图?

前端之家收集整理的这篇文章主要介绍了java – 什么是集合的视图?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在使用 Guava系列并阅读其文档时,我一直在阅读术语视图.

我已经寻找一个解释在这个背景下是什么意见,以及它是否在番石榴以外使用的术语.这是经常使用here.这个来自Guava的type有它的名字.

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

有人可以把我连接到接受的视图定义的链接,如果有一个?

谢谢.

解决方法

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

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

class KeySet implements Set<K> {
  private final Map<K,V> 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<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"

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

一般来说,使用视图而不是制作副本的优点是效率.例如,如果您有一个数组,并且需要获取一个获取列表的方法,那么您不会创建一个新的ArrayList和数据的整个副本–Arrays.asList视图只需要一个额外的内存,并通过访问原始数组来实现所有的List方法.

原文链接:https://www.f2er.com/java/122880.html

猜你在找的Java相关文章