使用数组实现ArrayList的效果
package day04.d2.shuzu;
/**
* 通过数组实现类似于集合的功能
* 包含功能有:
*
* 动态添加元素
* 在指定位置添加元素
*
* 删除指定下标的元素
* 删除指定内容的首个元素
* 删除指定内容的所有元素
*
* 修改指定下标的元素
*
* 查询指定元素的下标
*
*/
import java.util.Arrays; public class ArraysTest {
static int[] arr = new int[5];
static int num = 0; public static void main(String[] args) {
add(1);
add(1);
add(2);
add(2);
add(3);
add(3);
System.out.println("扩容: " + Arrays.toString(arr));
add(5, 5);
System.out.println("指定位置扩容: " + Arrays.toString(arr));
delete(5);
System.out.println("删除指定位置后的数组为: " + Arrays.toString(arr));
deleteContent(1);
System.out.println("删除指定内容的元素的数组为: " + Arrays.toString(arr));
deleteContentAll(3);
System.out.println("删除指定内容的所有元素的数组为: " + Arrays.toString(arr));
update(5, 10);
query(3);
} // 添加元素
public static void add(int ele) {
if (num >= arr.length) {
arr = doArr();
}
arr[num] = ele;
num++;
} // 在指定位置添加元素
public static void add(int index, int ele) {
if (index < arr.length) {
arr = doArr(index, ele);
} else {
System.out.println("数组越界!");
}
} // 删除指定位置元素
public static void delete(int index) {
if (index < arr.length) {
doCut(index);
}
} // 删除数组中首次出现的指定内容元素
public static void deleteContent(int ele) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == ele) {
doCut(i);
break;
}
}
} // 删除指定内容的所有元素
public static void deleteContentAll(int ele) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == ele) {
doCut(i);
i = 0;
}
}
} // 修改指定位置的元素内容
public static void update(int index, int ele) {
if (index < arr.length) {
arr[index] = ele;
} else {
System.out.println("数组越界!");
}
} // 查询指定的元素内容的首次位置,并显示
public static void query(int ele) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == ele) {
System.out.println(ele + "所在的下标为" + i);
break;
}
if ((i == arr.length - 1) && (arr[i] != ele)) {
System.out.println(ele + "不在当前所在的数组");
}
}
} // 数组扩容 动态扩容
public static int[] doArr() {
int[] arr_ = new int[arr.length + 1];
arr_ = Arrays.copyOf(arr, arr_.length);
return arr_;
} // 数组扩容 动态指定位置扩容
public static int[] doArr(int index, int ele) {
int[] arr_ = new int[arr.length + 1];
arr_ = Arrays.copyOf(arr, arr_.length);// 复制给新数组
for (int i = arr_.length - 1; i >= index; i--) {// 指定位置的元素后移
arr_[i] = arr_[i - 1];
}
arr_[index] = ele;
return arr_;
} // 数组缩减 动态缩减
public static void doCut(int index) {
// 根据指定的序号进行响应的缩减 // 平移覆盖思想
for (int i = index; i < arr.length - 1; i++) {
arr[i] = arr[i + 1];
}
arr = Arrays.copyOf(arr, arr.length - 1);
}
}
使用数组实现ArrayList的效果的更多相关文章
- (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)
目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...
- C#中数组、ArrayList和List三者的区别
在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢. 数组 数组在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. ...
- C# 数组,ArrayList与List对象的区别
在C#中,当我们想要存储一组对象的时候,就会想到用数组,ArrayList,List这三个对象了.那么这三者到底有什么样的区别呢? 我们先来了解一下数组,因为数组在C#中是最早出现的. 数组 数组有很 ...
- C#中数组、ArrayList和List<T>三者的发展历程
在C#中数组,ArrayList,List使我们用的最多的类型之一.他们共同的作用都是能够存储一组对象. 那么问题来了: (1)为什么要有三个一样作用的东西呢?他们都很完美吗? (2)谁先出生,又是因 ...
- 在Java中怎样把数组转换为ArrayList?
翻译自:How to Convert Array to ArrayList in Java? 本文分析了Stack Overflow上最热门的的一个问题的答案,提问者获得了很多声望点,使得他得到了在S ...
- Java学习笔记51:数组转ArrayList和ArrayList转数组技巧
ArrayList转数组: public class Test { public static void main(String[] args) { List<String> list = ...
- C#中数组,ArrayList与List对象的区别
在C#中,当我们想要存储一组对象的时候,就会想到用数组,ArrayList,List这三个对象了.那么这三者到底有什么样的区别呢? 我们先来了解一下数组,因为数组在C#中是最早出现的. 数组 数组有很 ...
- C# 数组、ArrayList、List、Dictionary的用法与区别
前言 在工作中经常遇到C#数组.ArrayList.List.Dictionary存取数据,但是该选择哪种类型进行存储数据,对于初学者的我一直不知道该怎么取舍.于是抽空好好看了下他们的用法和比较,在这 ...
- 数组,arrayList和List
数组,arrayList和List (1)数组在C#中是最早出现的.它在内存中是连续的存储的,所以索引速度很快,而且赋值与修改元素也很简单.可以利用偏移地址访问元素,时间复杂度为O(1);可以用折半查 ...
随机推荐
- dubbo之隐式参数
隐式参数 可以通过 RpcContext 上的 setAttachment 和 getAttachment 在服务消费方和提供方之间进行参数的隐式传递. 在服务消费方端设置隐式参数 setAttach ...
- hibernate中的懒加载和急加载
懒加载(FatchType.LAZY)是Hibernate为提高程序执行效率而提供的一种机制,简单说就是只有正真使用其属性的时候,数据库才会进行查询. 具体的执行过程就是:Hibernate从数据库获 ...
- 图像局部显著性—点特征(SiftGPU)
SIFT的计算复杂度较高. SiftGpu的主页:SiftGPU: A GPU Implementation of ScaleInvariant Feature Transform (SIFT) 对S ...
- 关于jQuery.form中formSerialize()等函数的适用对象
几个月前写一个页面,要用到Ajax提交,于是写了几行jQuery: …… var formData = $("form")[0].formSerialize(); …… 然后死活调 ...
- GDI 映射模式(11)
概述 调用 SetMapMode 函数可以设置映射模式: int SetMapMode( HDC hdc, // 设备环境句柄 int fnMapMode // 要设置的映射模式 ); 同样,调用 G ...
- Java 并行 (2): Monitor
转自:http://www.cnblogs.com/tomsheep/archive/2010/06/09/1754419.html 1. 什么是Monitor? Monitor其实是一种同步工具,也 ...
- [luogu4158 SCOI2009] 粉刷匠(dp)
传送门 Solution 把状态都记上暴力转移即可 Code //By Menteur_Hxy #include <queue> #include <cmath> #inclu ...
- mkdir:创建目录
mkdir:命令 1.命令详解 [功能说明] mkdir命令是“make directories”中每个单词的粗体字母组合而成,其功能是创建目录,默认情况下,如果要创建的目录已经存在,则会提示此文件 ...
- Golang - 开篇必须吹牛逼
目录 Golang - 开篇必须吹牛逼 Go牛逼吗 安装环境 Golang - 开篇必须吹牛逼 (1)我们为什么要学 高并发 深度 || 广度 (2)go学习思路和目标 多打多练 掌握go语言 做一个 ...
- Golang - 处理字符串
目录 Golang - 处理字符串 1. 字符串操作 2. 字符串转换 Golang - 处理字符串 1. 字符串操作 func Contains(s, substr string) bool 字符串 ...