`
hxquicl
  • 浏览: 2904 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

呆板动态数组和自定义动态数组

    博客分类:
  • java
阅读更多

/**

 * 定义一个呆板的动态数组

 * 

 * @author kowloon

 * 

 */

public class Array {

 

// 定义一个长度是0的数组,来表示动态数组存放数据的位置

// 初始状态该下,没有任何数据,长度是0

private int[] src = new int[0];

 

/**

* 将指定的数据添加到数组中

* @param t

*            要添加的数据

*/

public void add(int t) {

// 定义一个新的数组,长度是src的长度+1

int[] dest = new int[src.length + 1];

// 将要添加的数据放到新数组的最后一个位置

dest[dest.length - 1] = t;

// 如果原数组中有数据,这按照下标对应位置放到新数组

for (int i = 0; i < src.length; i++) {

dest[i] = src[i];

}

// 将src指向新数组

src = dest;

}

 

/**

* 获取指定编号的数据

* @param index

*            要获取的数据的编号

* @return 取得的数据

*/

public int get(int index) {

// 要获取的数据就在src数组中

return src[index];

}

 

/**

* 获得动态数组中数据的个数

* @return 返回数据的个数

*/

public int size() {

return src.length;

}

 

/**

* 将指定的数据插入到指定的位置

* @param t

*            要插入的数据

* @param index

*            要插入的下标位置

*/

public void insert(int t, int index) {

// 定义一个新数组,长度是src长度+1

 int dest[] = new int[src.length+1];

    for(int i=0;i<dest.length;i++){

// 如果i<index,则下标对应,如果i>index,

// 则将旧数组中的下标-1赋给新数组

         if(i<index){

    dest[i] = src[i];

    }else if(i>index){

    dest[i] = src[i-1];

    }

      }

    dest[index]=t;

        src = dest;

    }

 

 

 

/**

* 修改执行位置的数据

* @param t

*            修改后的数据

* @param index

*            要修改的数据的位置

*/

public void replace(int t, int index) {

src[index] = t;

}

 

/**

* 删除指定位置的数据

* @param index

*            要删除的数据下标位置

*/

public void delete(int index) {

// 定义一个新数组,长度是src长度-1

int[] dest = new int[src.length - 1];

for (int i = 0; i < src.length; i++) {

// 如果i<index,则下标对应,如果i>index,

// 则新数组中的下标-1

if (i < index) {

dest[i] = src[i];

} else if (i > index) {

dest[i - 1] = src[i];

}

}

src = dest;

 

}

}

 

 

**********************************************************************

/**

 * 自定义动态数组

 * 具有容量和增长率的动态数组[优化之后的]

 * @author kowloon

 * 

 */

public class Array2 {

private int rongliang = 10;// 初始容量

private int zengzhang = 10;// 每次增长的数量

private int count = 0;// 动态数组中的数据个数

 

// 定义一个长度是0的数组,来表示动态数组存放数据的位置

// 初始状态该下,没有任何数据,长度是0

Integer[] src = new Integer[rongliang];

 

public Array2() {

 

}

 

public Array2(int rongliang, int zengzhang) {

this.rongliang = rongliang;

this.zengzhang = zengzhang;

src = new Integer[rongliang];

}

 

/**

* 将指定的数据添加到数组中

* @param t要添加的数据

*/

public void add(int t) {

// 如果动态数组的长度<容量,

// 则可以直接添加到src从左往右第一个没有数据的位置

if (count < src.length) {

src[count] = t;

} else {

// 如果长度>=容量,就定义新的数组,按照增长数量增加

Integer[] dest = new Integer[src.length + zengzhang];

// 按照下标对应位置放到新数组

for (int i = 0; i < src.length; i++) {

dest[i] = src[i];

}

src = dest;

src[count] = t;

}

count++;

}

 

/**

* 获取指定编号的数据

* @param index

*            要获取的数据的编号

* @return 取得的数据

*/

public int get(int index) {

// 要获取的数据就在src数组中

return src[index];

}

 

/**

* 删除指定位置的数据

* @param index

*            要删除的数据下标位置

*/

public void delete(int index) {

// 如果删除1个数据后的长度减去初始容量除以增长值的余数是0

// 表示删除后的最后一个数据是在最后数组的最后一个位置

if ((src.length - 1 - rongliang) % zengzhang == 0) {

// 节省空间删除增长值,再次增加时会直接增加增长值,经行n+1次数组替换

// 只会多出一次数组替换时间可以忽略不计

Integer[] dest = new Integer[src.length - zengzhang];

for (int i = 0; i < dest.length; i++) {

if (i < index) {

dest[i] = src[i];

} else if (i > index) {

dest[i] = src[i + 1];

}

}

 

src = dest;

// 如果删除1个数据后的长度减去初始容量除以增长值的余数不是0

// 则不需要减少增加值,直接删除数据位置之前的数据不动,后面的

// 数据赋给前一位的数据,最后有数据的位置则会被替换为null

} else {

for (int i = 0; i < src.length; i++)

if (i < index) {

 

} else if (i > index) {

src[i - 1] = src[i];

}

 

}

// 执行一次长度-1

count--;

}

 

/**

* 将指定的数据插入到指定的位置

* @param t

*            要插入的数据

* @param index

*            要插入的下标位置

*/

public void insert(int t, int index) {

// 如果增加1个数据后的长度减去初始容量除以增长值的余数是0

// 则需要增加增加值,增加数据位置之前的数据不动,最后的

// 数据赋给后一位,因为从前面开是的话,列如5位给6位,6位给7位,

// 从插入的数据开始,后面每一位数据会一样,所以要从最后一位开始往后

// 赋值,最后有数据的位置会被替换null

if ((src.length + 1 - rongliang) % zengzhang == 0) {

Integer dest[] = new Integer[src.length + zengzhang];

for (int i = 0; i < dest.length; i++) {

// 如果i<index,则下标对应,如果i>index,

// 则将旧数组中的下标-1赋给新数组

if (i < index) {

dest[i] = src[i];

} else if (i > index) {

dest[i] = src[i - 1];

}

dest[index] = t;

src = dest;

}

} else {

// 如果i<index,则下标对应,如果i>index,

// i是从index+1开始执行最后一位数据往后一位赋值

for (int i = 0; i < index+2; i++) {

if (i < index) {

src[i] = src[i];

} else if (i > index) {

for (int x = 0; x <src.length-index-1;x++) {

src[src.length-x-1] = src[src.length-x-2];

}

}

}

src[index] = t;

}

count++;

}

 

/**

* 获得动态数组中数据的个数 src.length是初始数组的长度,不代表动态数组的长度 动态数组的长度表示src中已经存放的数据个数

* @return 返回数据的个数

*/

public int size() {

return count;

}

 

/**

* 修改执行位置的数据

* @param t

*            修改后的数据

* @param index

*            要修改的数据的位置

*/

public void replace(int t, int index) {

src[index] = t;

}

 

}

 

分享到:
评论

相关推荐

    一款带壁纸的自定义Android日历app以及源代码

    ④ 对于日程处理部分的两个按钮没有使用普通的按钮,而是使用了类似知乎App里面的按钮,即悬浮按钮(它是谷歌基于Material Design定制的),给客户一种动态和立体感的体验效果。 ⑤ 在记事本界面力求简约,最多...

    win7如何设置动态桌面.docx

    设置动态桌面可以让用户摆脱呆板的桌面,感受更加生动和有趣的桌面体验。此外,动态桌面还可以提高用户的工作效率和灵感。 如何设置动态桌面? 设置动态桌面需要满足以下条件: 1. 计算机开启 Aero 效果。 2. ...

    MySQL数据库在PHP网页中的动态应用 (1).pdf

    传统网页设计主要以静态网页形式为主,比网页样式呆板且占用较大空间,并且访问时间相对较长,而在PHP网页这种使用数据库可以建设动态化网页,从而提高网页的综合性能。 PHP语言是一种服务器端语言,与其他客户端...

    WOW头像增强,使头像不呆板

    ag_UnitFrames提供了自定义的头像设计,包括但不限于边框样式、颜色、大小、透明度以及信息展示的详细程度。你可以调整头像的布局,比如将生命条和法力条的位置更改,或者添加额外的状态指示器,如仇恨、增益和减益...

    尚硅谷-实验2:自定义泛型类的使用.pdf

    ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅出,迅速让你把握问题本质,四两拨千斤 2.课程内容推陈出新: ·基于JDK 11,将Java8、Java9、Java10、Java11新特性一网打尽 ·课程中,Eclipse...

    用Delphi实现纹织CAD软件中的流动蚂蚁线.pdf

    传统的区域选择方法通常采用静态直线选择块,这种方法单一且呆板,缺乏直观性和动态性。流动蚂蚁线是一种更加直观和生动的区域选择方式,能够吸引用户的注意力,增加操作的便利性。 #### 流动蚂蚁线的特点 流动...

    Skinmagic漂亮皮肤

    "Skinmagic漂亮皮肤"是一个专为VC++应用程序设计的皮肤美化工具,旨在为传统的、看起来较为呆板的对话框和用户界面赋予全新的视觉效果。它通过应用各种精美的皮肤主题,使得软件界面更加吸引人,提升用户体验,符合...

    2021-2022收藏资料脱变呆板 OL也能穿搭出职场潮流.doc

    在21世纪的现代职场中,着装不再仅限于传统的黑白配色,而是融入了更多的时尚元素,打破了以往的呆板形象。OL(Office Lady)们可以通过巧妙的搭配,展现出独特的职场潮流风格。以下将详细探讨几种适合OL的穿搭风格...

    围棋树-如何解决树的三大难题.pdf

    1. 使用坐标(行和列)来表达树的节点在树中相对位置,解决了传统树结构中使用数组或链表表示节点之间关系所带来的结构呆板、效率低下的老大难问题。 2. 提供了完善的溢出处理机制,引进了溢出列的概念,提供了一个...

    自动控制仿真软件设计题目:星空落叶

    设计要求注重动画的逻辑性和视觉效果,包括星星的闪烁、文字的动态显示和树叶的自然飘落。在动画过程中,需要实现以下功能: 1. 星星以一定规律闪动,并配合文字“闪亮星夜”出现在屏幕。 2. 经过一段时间,星星停止...

    药用植物学重点.doc

    本文档概括了药用植物学的重点,包括植物细胞的结构和功能、细胞器的种类和特点、植物体的结构和功能、保护结构和呆板结构等方面。 一、植物细胞的结构和功能 植物细胞是植物体的基本结构单位,由细胞壁、细胞膜、...

    文件夹图标修改器.bat

    使用该文件可以快速改变和回复文件夹图标,将呆板难看的文件夹图标改变称自定义的既美观又大方的图标文件。

    摄影构图方法经典方法三种

    虽然这种方法简洁明了,能够清晰地突出主体,但缺点是可能会导致照片显得过于静态和呆板,缺乏动感和层次感。为了打破这种单调,摄影师可以尝试利用前景、背景或不同的视角来增加视觉兴趣。 其次,三分点构图法是...

    JeecgBoot 是一款基于代码生成器的低代码开发平台!.rar

    页面太呆板,不灵活。 2. UI对跨浏览器支持不太好,低版本的IE,火狐都有不同的显示问题。 对web service的支持不太完善。 改进建议: 持久化方面建议多封装一些工具,比如直接返回bean类型的list,数组类型,map...

    JavaScript实现图片瀑布流和底部刷新

    在本篇文章中,我们将会介绍如何通过JavaScript技术实现图片瀑布流布局以及底部刷新功能,这在网页设计中是常见的布局方式,尤其用于图片展示网站,目的是为了使图片和文字内容的展示更具美感,避免呆板的排列,增强...

    交互原型设计:高保真界面交互效果.pptx

    放置在不同位置的点能够传递不同的情感,如上方的点带来活泼和不稳定感,下方的点则显得沉稳但可能呆板,右侧的点暗示飘逸或下坠。通过放大特定元素并置于中心位置,可以强化视觉焦点,提升用户的注意力。 线在设计...

    移动机器人机械臂的设计.docx

    智能移动呆板人正在向非制造业偏向扩展,这些非制造业包罗航天、海洋、军事、修建、医疗照顾护士、办事、农林、办公自动化和灾害救护等,如飞行呆板人、海难救援呆板人、化肥和农药喷撒空中呆板人、照顾护士呆板人等...

    玩图 V5.3.7

    用玩图你可以制作GIF动画, 还能加滤镜和动态相框, 让呆板的照片瞬间跃然纸上, 让你显得很酷, 与众不同。并且能一健分享到新浪微博, 滕讯微博, 人人网3大社区。数据显示, GIF动画能让你的微博或者个人主页的关注度...

Global site tag (gtag.js) - Google Analytics