当前位置: 首页 > 面试题库 >

有什么方法可以设置集合的最大大小?

柴翰藻
2023-03-14
问题内容

有什么办法可以设置Java的最大集合大小?


问题答案:

你可以这样做:

List<X> list = Arrays.asList(new X[desiredSize]);
// where X is any Object type (including arrays and enums,
// but excluding primitives)

结果列表是可修改的,但不可调整大小(即add(e)remove(e)虽然不起作用,但set(index, e)可以)。

参考:

  • Arrays.asList(T ...)

或者:使用Guava,这是一个静态方法,该方法以最大大小装饰现有的List

public static <T> List<T> setMaxSize(
    final List<T> input, final int maxSize){

    return new ForwardingList<T>(){

        @Override
        public boolean addAll(Collection<? extends T> collection){
            return standardAddAll(collection);
        }

        @Override
        public boolean addAll(int index, Collection<? extends T> elements){
            return standardAddAll(index, elements);
        }

        public boolean add(T e) {
            checkMaxSize();
            return delegate().add(e);
        }

        @Override
        public void add(final int index, final T e){
            checkMaxSize();
            delegate().add(index, e);
        }

        private void checkMaxSize(){
            if(size() >= maxSize){
                throw new UnsupportedOperationException("Maximum Size "
                    + maxSize + " reached");
            }
        }

        @Override
        protected List<T> delegate(){
            return input;
        }
    };
}

由于Forw​​ardingXxx类适用于所有标准集合类型,因此您也可以为其他集合编写类似的修饰符。

显然,这仅在您的客户端代码使用修饰的集合时才有效。如果更改基础集合,则很麻烦(就像Collections.unmodifiableXXX方法一样)

参考:

  • ForwardingList


 类似资料:
  • 问题内容: 有没有一种方法可以通过编程而不是作为vm参数来设置最大Java堆大小? 就像是: 问题答案: 不适用于任何Hotspot JVM。只能在命令行上指定JVM堆参数,然后在JVM的生存期内对其进行固定。 使用Hotspot Java实现,“更改”应用程序堆大小的唯一方法是使用不同的命令行参数在新的JVM中重新启动它。 (我隐约记得,其他一些供应商的JVM 确实 允许在运行的JVM中更改某些

  • 我使用的是SpringBoot2.0。3释放。我想增加HikariCP的最大池大小,默认情况下为10。 我试着在带有 spring.datasource.hikari.maximum-池-大小=200 但是它不起作用,因为在日志中它仍然显示最大池大小为10。 我想改变的原因是,我不知怎么地达到了登台的极限,我不知道是什么原因造成的。

  • 问题内容: 我正在启动一个Java jar文件,该文件通常需要比默认的64MB最大堆大小更多的文件。256MB的堆大小足以满足此应用的需求。是否有任何指定(可能在清单中?)启动jar时始终使用最大256MB的堆大小?(如果需要,请在下面提供更多详细信息。) 这是我用Java编写的命令行应用程序,它可以进行一些图像处理。在高分辨率图像(大约12兆像素及以上,这并不罕见)上,我收到OutOfMemor

  • 问题内容: 问题答案: Redis永远不会更改最大打开文件数。 这是一个操作系统配置,也可以基于每个用户进行配置。该错误具有描述性,并告诉您:“增加’ulimit -n’” 您可以参考此博客文章,了解如何增加最大打开文件描述符:http : //www.cyberciti.biz/faq/linux-increase- the-maximum-number-of-open-files/

  • 问题内容: 我有两台linux机器(都是VM),一台有12GB内存,另一台有8GB内存。 我试图在两台机器上启动相同的Java程序,并且最大可能的最大堆大小(使用-Xmx标志)。以下是我得到的结果。 12GB机器:9460MB 8GB机器:4790MB 如果我指定的最大堆大小超出了限制,我将得到以下错误。 我检查了两个系统中的可用内存(使用命令),然后得到关注。 12GB机器:大约3GB可用空间。