将列表复制回数组的时间复杂度是多少,反之亦然?

 手机用户2502884601 发布于 2023-02-02 19:58

我想知道什么是时间复杂的大O(n)符号]的 ArrayListArray转换:

ArrayList assetTradingList = new ArrayList();
assetTradingList.add("Stocks trading");
assetTradingList.add("futures and option trading");
assetTradingList.add("electronic trading");
assetTradingList.add("forex trading");
assetTradingList.add("gold trading");
assetTradingList.add("fixed income bond trading");
String [] assetTradingArray = new String[assetTradingList.size()];
assetTradingArray.toArray(assetTradingArray);

类似地,数组以下列方式列出的时间复杂度是多少:

方法1使用Arrays.asList:

String[] asset = {"equity", "stocks", "gold", "foreign exchange","fixed
    income", "futures", "options"};
List assetList = Arrays.asList(asset);

方法2使用collections.addAll:

    List assetList = new ArrayList();
    String[] asset = {"equity", "stocks", "gold", "foreign exchange", "fixed
        income", "futures", "options"};
    Collections.addAll(assetList, asset);

方法3 addAll:

     ArrayList newAssetList = new ArrayList();
     newAssetList.addAll(Arrays.asList(asset));

我对来回复制的开销感兴趣的原因是因为在典型的访谈中,问题来自诸如此类given an array of pre-order traversal elements, convert to binary search tree,涉及到arrays.与List提供一大堆诸如操作remove等,这将使其简单的使用代码ListArray.

在这种情况下,我想保护我使用列表list数组`说"我会先将数组转换为List,因为这个操作的开销并不多(希望如此)".

建议用于来回复制元素的任何更好的方法arrays都会更快.

谢谢

1 个回答
  • 这似乎Arrays.asList(T[]);是最快的O(1)

    因为该方法返回不可修改的List,所以没有理由将引用复制到新的数据结构.该方法仅使用给定数组作为List它返回的不可修改实现的后备数组.

    其他方法似乎是将每个元素逐个复制到底层数据结构.ArrayList#toArray(..)使用System.arraycopy(..)内心深处(O(n)但更快,因为它本地完成).Collections.addAll(..)循环遍历数组元素(O(n)).


    使用时要小心ArrayList.当达到其容量时,背衬阵列的尺寸加倍,即.当它满了.这需要O(n)时间.ArrayList除非您知道从一开始就添加了多少元素并使用该大小创建它,否则添加到一个可能不是最好的想法.

    2023-02-02 20:01 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有