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

ArrayList.trimToSize()方法

嵇昱
2023-03-14
问题内容

我可以在动态arrayList中使用ArrayList.trimToSize()方法吗?

  1. 如果使用它,会发生什么?
  2. 我可以在动态ArrayList上使用此方法获得任何好处吗?
  3. 在这种情况下,我应该使用此方法。

提前致谢。


问题答案:

您可以从文档中链接自己:

将此ArrayList实例的容量调整为列表的当前大小。应用程序可以使用此操作来最小化ArrayList实例的存储。

在内部,一个ArrayList存储所有项目的数组。在某些时刻,ArrayList将通过将所有值复制到更大的数组中来“扩展”此数组。每当添加一项且所需容量大于当前容量时,就会发生这种情况。此时发生的是以下代码行:

int newCapacity = oldCapacity + (oldCapacity >> 1);
elementData = Arrays.copyOf(elementData, newCapacity);

本质上,这将创建一个新数组,其大小是当前数组的1.5倍。此方法的作用是调整内部数组的大小,以使其没有剩余空间。

  1. 您看不到任何事情发生。您不会丢失任何数据,它只是较小的支持阵列。将数据添加到arraylist将再次正常扩展阵列。

  2. 我认为你的意思是“正常” ArrayList。如果使用此选项,则将减少所使用的内存,但是如果在此之后仍要添加数据,那将是徒劳的,并且对于小列表而言,这是毫无用处的。如果您有ArrayList很多项目,并且确定不再添加,则可以调用此方法以减少一些内存占用。

  3. 往上看。我认为您不太可能会使用此功能。

trimToSize() 从来源:

public void trimToSize() {
    modCount++;
    int oldCapacity = elementData.length;
    if (size < oldCapacity) {
        elementData = Arrays.copyOf(elementData, size);
    }
}


 类似资料:
  • 例如,我如何做到这一点? 和 像这样的东西,我试着在网上搜索,但我找不到任何关于这方面的教程,所以我在这里问。

  • 只是想知道为什么 调用world\u开关: 结果没有任何变化,我想增加或减少实例变量@pos\u X或@pos\u Y 这是我的初始化方法 这就是我如何创建类的实例 我们将不胜感激

  • 本文向大家介绍iOS hitTest方法&pointInside方法相关面试题,主要包含被问及iOS hitTest方法&pointInside方法时的应答技巧和注意事项,需要的朋友参考一下 hitTest方法 当事件传递给控件的时候,就会调用控件的这个方法,去寻找最合适的view point:当前的触摸点,point这个点的坐标系就是方法调用者   pointInside方法 作用:判断当前这个

  • 书籍与公开课 我喜欢看一些有关基础原理的书,如操作系统、计算机网络等。但是最近在看《计算机网络:自顶向下方法》的时候发现,这些书都太大而全了,让人看着很吃力,而且抓不住重点。 知名大学都有公开课,视频比枯燥的书要更好,也讲的更有侧重点。我觉得以后可以跟着公开课来看书: 如果不知道某个科目要看什么书,可以跟着公开课学习,看参考教材 如果已经确定要读某本经典书,可以先找有没有公开课 这些公开课可以在知

  • 主要内容:Python类实例方法,Python类方法,Python类静态方法和类属性一样,类方法也可以进行更细致的划分,具体可分为 类方法、 实例方法和 静态方法。 和类属性的分类不同,对于初学者来说,区分这 3 种类方法是非常简单的,即采用 @classmethod 修饰的方法为类方法;采用 @staticmethod 修饰的方法为静态方法;不用任何修改的方法为实例方法。 其中 @classmethod 和 @staticmethod 都是函数装饰器,后续章节会对其做详

  • Methods 方法 Pointers vs. Values 指针 vs. 值 As we saw with ByteSize, methods can be defined for any named type (except a pointer or an interface); the receiver does not have to be a struct. 正如 ByteSize 那样