`
xiaoZ5919
  • 浏览: 403768 次
  • 性别: Icon_minigender_1
  • 来自: 安平人@北京
博客专栏
Group-logo
Netty学习笔记
浏览量:73096
社区版块
存档分类
最新评论

初始化(Map,List)容器类的容量会有一定的性能提升

 
阅读更多

 容器类底层的数据结构大多使用数组,我们知道数组是不能动态修改它的size,假如非要修改的话,只要初始化另外一个更大容量的数据,并将原来的数据复制过去。对容器类的插入操作,首先就得check是否容量满足,如不满足先扩展

 public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }
 private void ensureCapacityInternal(int minCapacity) {
        modCount++;
        // overflow-conscious code
        if (minCapacity - elementData.length > 0)
            grow(minCapacity);
    }

 private void grow(int minCapacity) {

        // overflow-conscious code
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);//扩展为原来容量的1.5倍
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        elementData = Arrays.copyOf(elementData, newCapacity);//复制操作
    
分享到:
评论

相关推荐

    c++程序设计

    通过`Initializationlist`这个文件名,我们可以推测这个压缩包可能包含了关于C++初始化列表的实例代码,演示了如何在不同场景下使用初始化列表,例如在类构造函数、数组初始化、STL容器初始化等。通过研究这些示例,...

    C++容器类的简单介绍.doc

    例如,它们都有默认构造函数来初始化容器,复制构造函数用于创建容器副本,析构函数用于释放内存。此外,还有一系列比较操作符如==、!=、&lt;、&gt;等,以及成员函数如empty、size、max_size、swap等,用于检查容器状态、...

    节 数组字符串及容器类PPT学习教案.pptx

    接下来的6.4至6.9章节没有详细内容,但可以推测会涵盖数组和容器类的比较,容器类的介绍(如ArrayList、LinkedList、HashSet等),迭代器的使用,以及容器的分类方法(如List、Set、Map接口及其实现类)。...

    java容器详细解析

    ArrayList的初始化有三种方式:无参构造函数、带参构造函数和Collection构造函数。ArrayList的add方法使用了System.arraycopy来实现插入元素,这使得ArrayList的插入操作相对较慢。 LinkedList LinkedList是一个...

    第5章数组、字符串及容器类.rar

    STL中的主要容器有:向量(vector)、列表(list)、集合(set)、映射(map)、队列(queue)、堆(priority_queue)和栈(stack)。向量是一个动态数组,支持随机访问;列表是一个双向链表,插入和删除操作高效;...

    c++/STL容器设计相关

    - 构造函数:初始化容器,可以指定初始容量、拷贝构造等。 - 插入操作:如push_back()(向向量尾部添加元素)、insert()(在指定位置插入元素)。 - 删除操作:如pop_back()(删除向量尾部元素)、erase()(删除指定...

    容器画笔 学习C++的经典例子

    C++标准库提供了一系列的容器类,如vector、list、set、map等,它们是编程中处理数据结构的基础。容器画笔的例子旨在帮助学习者理解这些容器的用法、特性以及如何有效地利用它们来解决实际问题。 1. **vector**:这...

    C++顺序容器,容器适配器,关联容器的操作

    本文将详细介绍几种常见的顺序容器,包括`vector`、`string`、`list`、`forward_list`、`deque`以及`array`,并且探讨这些容器的初始化、赋值、大小调整、元素添加与删除等基本操作。 #### 二、顺序容器详解 ##### ...

    list链表实现技术

    `list`容器可以通过模板类`std::list`来定义,它接受一个类型参数,表示存储的元素类型。例如,定义一个存储整数的链表: ```cpp std::list&lt;int&gt; myList; ``` 2. **插入操作**: - `push_back()`:在链表末尾...

    STL常用容器1

    在上述示例代码中,展示了如何使用vector的基本操作,如初始化、添加元素(push_back)以及遍历元素。另外,还提到了静态数组array,它是C++11引入的一个新的容器,与传统的C风格数组相比,它提供了更安全和便利的...

    Java学习笔记,容器(集合)

    数组是最基本的容器,可以存储多个对象,但它有很多缺点,如长度必须在初始化时指定,数组采用连续存储空间,删除和添加效率低下,数组无法直接保存映射关系,数组缺乏封装,操作繁琐。因此,我们需要一种更强大、更...

    Java双括弧初始化操作技巧

    Java双括弧初始化是一种在Java编程中用于简化集合框架(如List、Set、Map等)对象的创建和初始化的技巧。这种技术通过创建一个匿名内部类,并在其内部使用实例初始化块来填充集合对象,从而提高了代码的简洁性和...

    java面试宝典

    141、使用useBean标志初始化BEAN时如何接受初始化参数 36 142、使用JSP如何获得客户浏览器的信息? 36 143、能象调用子程序一样调用JSP吗? 36 144、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS...

    5分钟搞定集合

    集合通常有一个初始容量,当需要容纳更多元素时会自动扩容。了解如何预估和调整集合容量可以优化性能,如ArrayList的`ensureCapacity()`和HashMap的构造函数。 总之,理解并熟练使用List、Set和Map是成为合格的...

    C++编程思想(中文)\15

    C++的编译器供应商认识到了这一点,因此提供了标准模板库(STL),其中包括一系列容器类,如`vector`、`list`、`map`等,这些容器类都是通过模板实现的,具有高度的通用性和灵活性。 #### 模板:源代码重用的关键 ...

    Java 基础核心总结 +经典算法大全.rar

    类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 ...

    Effective STL

    1. **条款1:了解容器** - STL提供了多种容器,如vector、list、deque、set和map等,每种都有其特定的设计目的和性能特性。理解这些容器的内部工作原理和适用场景至关重要。 2. **条款2:了解迭代器** - 迭代器是...

    自己实现的字符串hash类

    7. **性能优化**:为了提高性能,`HashMapString`可能采用了优化的策略,如初始化哈希表时预分配一定的容量、使用好的装载因子、减少冲突等。 通过阅读并理解`HashMapString.cpp`和`HashMapString.h`的源代码,我们...

    java容器简介.txt

    - **声明与初始化**:在Java中声明一个数组时,需要指定数组的类型以及数组名。例如,`int[] numbers;`表示声明了一个整型数组`numbers`。 - **长度属性**:数组有一个固定的长度属性`length`,可以通过该属性获取...

Global site tag (gtag.js) - Google Analytics