在学习Tomcat源码时看到很多地方都用到了动态数组的设计,而不是直接使用集合。这种方法很值得我们学习借鉴,所以在此单独拿出来学习讨论。
比如其中向容器Server增加service的方法如下(其中与本文讨论无关的代码已省略):

private Service services[] = new Service[0];public void addService(Service service) {Service results[] = new Service[services.length + 1];System.arraycopy(services, 0, results, 0, services.length);results[services.length] = service;services = results;}}

上面代码用System.arraycopy方法就很巧妙的将一个空间大小为0的数组动态变长。我们只需要声明一个数组类型而无需关心数组真正可用长度是多少。如果需要删除其中某个值,代码如下。

public void removeService(Service service) {synchronized (servicesLock) {int j = -1;for (int i = 0; i < services.length; i++) {if (service == services[i]) {j = i;break;}}if (j < 0)return;int k = 0;Service results[] = new Service[services.length - 1];for (int i = 0; i < services.length; i++) {if (i != j)results[k++] = services[i];}services = results;}}

java怎样实现动态数组?相关推荐

  1. Java大用处——动态数组的实现

    数组大家平常都用,数组虽然有优点但是最让我不爽的就是它的定长. 有人会说,那就用链表啊,链表插入,删除是方便,但是遍历速度慢. 所以,我就想写一个动态的数组. 原理是这样的,当你想增加数组大小时,我们 ...

  2. Java——ArrayList(动态数组)介绍

    文章目录 一.简介 二.使用 1.构造 1.1 无参构造 1.2 指定初始容量 1.3 利用其他的collection进行构造 2.基础操作 2.1 添加元素 2.2 删除元素 2.3 修改元素 2. ...

  3. java怎么复制动态数组_Java 数组排序复制等操作(Java Arraycopy)

    //手机终端 请上下左右 滑动屏幕 观看更全! //package Main; public class Arraycopy { public static void main(String[] ar ...

  4. c++ 构造函数数组_“动态数组”的设计与实现

    引言 数据结构是计算机存储.组织数据的方式.常见的数据结构有: (1)线性结构 如:线性表(包括:数组.链表.栈.队列.哈希表). (2)树形结构 如:二叉树.AVL树.红黑树.B树.堆.Trie.哈 ...

  5. 2021-9-下旬 数据结构-线性表-动态数组-java代码实现

    信管的数据结构讲的太水了,遂重学(看的网课:恋上数据结构与算法,讲的very good),为算法学习打基础(都大三了还在打基础),顺便在leetcode上跟进一些相关的题,记录在这里,这里最方便复习 ...

  6. 基于java的数据结构学习——动态数组C++类模板(含拷贝构造,重载常见运算符)

    之前实现了java的动态数组,试着写了个C++版的,同样对时间复杂度振荡进行了处理.纯手打,代码如下 : // // Created by PC-Saw on 2018/12/19. //#ifnde ...

  7. Java 数组常用操作二(扩充、扩容、重复数据、动态数组、数组差集、数组交集、查找指定元素、判断是否相同、数组合并)

    数组扩容(扩充) public class Main {public static void main(String[] args) {String[] names = new String[] { ...

  8. java动态数组的实现的_基于Java的动态数组分析与实现

    动态数组 概念 基于Java提供的静态数组封装自己的动态数组,动态数组涉及的组成部分如下图所示. 组成部分解读data:静态数组,通过泛型支持多种类型的元素:private E[] data;. si ...

  9. 简单的动态网站java,Java实践:一个简单的动态数组实现

    一个简单的动态数组实现 基于数组实现 添加10w的容量 在删除 所有 容量 平均是 0.4秒 这个效率是可观的 下面来一起看看代码package com.array; import java.util ...

最新文章

  1. 关于Python函数的一些问题
  2. Web性能优化之雅虎军规
  3. mysql自带命令使用教程_自用mysql自带命令实现数据库备份还原
  4. 微博关注者数量在计算中的作用
  5. 基于手机系统的实时目标检测
  6. python实现多智能体一致性_多智能体深度学习算法MADDPG的PARL实践
  7. 按键精灵_汉字转拼音
  8. 走进WPF之开发类似Visio软件
  9. 飞思卡尔智能车知识总结
  10. 在校大学生如何申请免费教育版 Intellij IDEA
  11. Python爬取豆瓣电影top250(附全部源码)
  12. numpy_abs和fabs
  13. 让·阿方索·德纳(Jean Alfonso decena)引领对话式人工智能创新并颠覆菲律宾金融科技...
  14. iMeta: 整合宏组学重新认识生命和环境科学
  15. 开启VPN和NAT服务
  16. MySQL TRUNCATE 函数详解
  17. 关于vue ui启动没反应问题
  18. 多媒体计算机的图像包括,多媒体计算机常用的图像包括什么
  19. 四元数矩阵向量积 matlab
  20. 生活中,真的有那种令人驻足的美女吗?

热门文章

  1. jQJQJQJQJQJQ
  2. GDAL 遥感 图像处理 锐化(Laplace算子、Sobel算子)
  3. 智能算法系列之粒子群优化算法
  4. epub解压的多个html制作单个html
  5. 干货 | 调用AI api 实现网页文字朗读
  6. Python itertools accumulate函数详解
  7. Docker之操作系统Alpine
  8. alpine 使用国内源
  9. 二叉树的递归遍历及非递归遍历
  10. C++程序设计三周教学记录