package com.ct.array;
/**
* @author MoonMonster
* @version 创建时间:2015年10月21日 下午10:15:05
*/
public class Array {
//数组中元素个数
private int count = 0;
//初始容量大小
private int capcity = 16;
//增量,每次增加的比例
private double increment = 1.2;
//初始化数组
private Object[] src = new Object[capcity];
public Array() {
}
//自定义原始数组大小
public Array(int capcity) {
this.capcity = capcity;
}
// 增加
public void add(Object obj) {
//判断是否越界,如是,则扩充数组
if (count >= src.length) {
src = extend();
}
//将新增加的数据放在count处
src[count] = obj;
count++;
}
// 对数组的扩充
private Object[] extend() {
//扩充后的数组容量是旧的数组的increment倍
Object[] dest = new Object[(int) (src.length * increment)];
for (int i = 0; i < src.length; i++) {
dest[i] = src[i];
}
//返回扩充后的数组
return dest;
}
// 输出
public void print() {
for (int i = 0; i < count; i++) {
System.out.print(src[i] + " ");
}
System.out.println();
}
// 获得数组大小
public int size() {
return count;
}
// 插入
public void insert(int index, Object obj) {
if(count + 1 >= src.length){
src = extend();
}
//从最后一个元素开始,把前一个元素放到后一个位置来
for(int i=count; i>index; i--){
src[i] = src[i-1];
}
//将要插入的元素放在index处
src[index] = obj;
//在插入一个元素后,长度+1
count ++;
}
//替换index处的数据
public void replace(int index, Object obj){
src[index] = obj;
}
//删除index处的数据元素
public void delete(int index){
for(int i=index; i<src.length-1; i++){
src[i] = src[i+1];
}
count --;
}
//返回index处的数据
public Object get(int index){
return src[index];
}
}
测试类
package com.ct.array;
/**
* @author MoonMonster
* @version 创建时间:2015年10月21日 下午10:20:50
*/
public class Demo {
public static void main(String[] args) {
Array arr = new Array();
long t1 = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
arr.add(new Integer(i));
}
long t2 = System.currentTimeMillis();
System.out.println("耗时: " + (t2 - t1));
arr.insert(2, new Integer(123));
//删除
arr.delete(0);
//输出
arr.print();
//数组长度
System.out.println("数组的长度为: "+arr.size());
}
}
1. a.在定义增量时,不要定义成一个固定的值,每次扩充一定比例。
b.比例不是越大越好,也要考虑到内存问题,所以取个合适的值就行。
c.本来要测试取什么增量值最好,但每次测的结果误差太大,又不知道如何改,便放弃 了。
2. 在Array类中的src数组,可以定义成Object类型,那么便可使用全类型的数据,而不是某个固定下来的了。
3. 在删除和增加等方法中,不要使用临时数组来保存数据,那样会耗时耗内存。
4. 尽量不要在方法中出现重复的代码,例如add()和insert()方法中,都需要用到extend()方法中的代码,便可以提取出来封装为方法,易于修改和阅读。
5.先暂时写这几个方法,其他的例如查找是否存在某个数据或者某个数据有多少个,日后再说。
分享到:
相关推荐
纯手写 java 数组模拟链表约瑟夫环问题 有很大更改空间 仅供参考
数组的初始化方式总共有三种:静态初始化、动态初始化、默认初始化。 3. 数组常见操作 数组创建后,我们经常需要对数组做两种最常见的操作:遍历、拷贝。 * 遍历指的就是“通过循环遍历数组的所有元素”。 * 拷贝...
在Java编程语言中,手写输入和原笔迹再现是一项技术,它允许用户通过触摸屏或数字笔在屏幕上书写文字,然后系统会将其转换为可编辑的文本或保持原笔迹的形式显示。这个"handwriting(JAVA).zip"压缩包文件提供了一种...
Java 手写识别源代码详解 本文档是一个 Java 手写识别源代码的实现,主要使用 Java 语言编写,利用 Java 的图形用户界面(GUI)组件实现手写识别功能。下面是对该源代码的详细解释: 类和接口 在该源代码中,我们...
**HashMap详解与手写实现** HashMap是Java编程中常用的数据结构之一,它是基于哈希表实现的,提供了高效的键值对存储和查找功能。在面试中,深入理解HashMap的内部工作原理是衡量开发者基础扎实与否的重要标准。...
3. **实时预览**:在用户签名过程中,可以通过连续调用pictureBox1的Paint事件,在pictureBox1上实时显示绘制的线条,形成签名的动态效果。 4. **保存为图片**:完成签名后,可以使用GDI+的位图(Bitmap)类将...
`ArrayList`是以数组实现的列表,适合于随机访问;`LinkedList`是链表实现,对于插入和删除操作更高效;`HashSet`不允许重复元素,没有顺序;`TreeSet`是有序的集合,基于红黑树实现;`HashMap`是键值对的存储,非...
《Java手写识别源代码详解》 在计算机视觉和人工智能领域,手写识别是一项重要的技术,它能够将手写的字符转换为可编辑的文本。Java作为一种广泛应用的编程语言,也提供了实现这一功能的可能性。这份“java手写识别...
《基于Java实现的手写汉字识别系统》 在人工智能领域,机器学习是研究计算机如何自动学习经验,提升性能的重要分支。然而,本项目不依赖于传统的机器学习方法,而是利用0-1矩阵来处理和识别手写汉字。这是一种创新...
`ArrayList`是`List`接口的一个具体实现,它底层基于动态数组(Resizable-array)来存储元素。这使得`ArrayList`在访问元素时具有较高的效率,因为数组的索引访问时间复杂度为O(1)。然而,插入和删除元素时,如果...
在这个Java代码中,`quickSort()`方法是主排序函数,它接受数组和两个索引作为参数,表示要排序的子数组范围。`partition()`方法用于执行分区操作,找到基准元素的正确位置,并返回该位置。`swap()`方法则用于交换...
本项目是使用Java实现的感知机,用于手写数字识别,这在图像处理和模式识别领域有着广泛应用,如OCR(光学字符识别)系统。 首先,我们要理解感知机的工作原理。感知机模型基于线性可分的概念,它通过找到一个超...
- **二元搜索**:在选择题第5题中,我们了解到 `java.util.Arrays` 类提供了 `binarySearch` 方法用于对已排序的数组进行二元搜索。这是一种高效的查找算法,时间复杂度为O(log n)。 ### 5. 方法参数 - **方法参数...
Java 知识点 手写 ArrayList Java 中最常用的类是 ArrayList,它的实现原理和方法非常重要。在面试中,经常要求手写一个 ArrayList,以考察应聘者对 ArrayList 的熟悉程度。本文将详细介绍如何手写一个 ArrayList,...
Java手写简易版HashMap的使用(存储+查找) Java手写简易版HashMap是Java中的一种常用的数据结构,它提供了高效的存储和查找键值对的功能。下面我们将详细介绍Java手写简易版HashMap的使用,包括存储和查找键值对的...
如果需要在Java代码中向Ant传递命令行参数,可以修改`command`数组,例如设置属性值: ```java String[] command = {"-DmyProperty=value", "-f", "path/to/build.xml", "compile"}; ``` 在Ant构建文件中,可以...
在CRC16类中,可以看到一个静态数组`auchCRCHi`,这是预先计算好的CRC查找表,用于高效地计算CRC校验码。 在CRC16校验过程中,通常包括以下步骤: - 将数据字节与初始CRC值(通常为全1)进行异或。 - 对每个字节...
数组是Java编程中的基本数据结构,用于存储同类型的多个数据。这个实验旨在让学习者掌握数组的创建、初始化、访问以及操作数组元素的方法。 1. **实验内容**:创建不同类型的数组,如整型数组、字符型数组等,学习...
这里的"剑指offer编程题66道题目描述及java代码实现汇总"是一个集合,包含了书中66个编程挑战的详细描述以及对应的Java代码实现。以下是对这些编程题目的部分解析和相关知识点的详细阐述: 1. **数组中出现次数超过...
Java实现自己的Json解析器——Json字符串解析原理 根据提取到的字符,转入不同的解析方法中, 例如字符是t,说明值可能是true,只需检查后面三个字符,如果是r、u、e,则可以直接返回true。 字符是f,说明值可能是...