使用数组实现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);可以用折半查 ...
随机推荐
- POJ 3041 - 最大二分匹配
这道题实现起来还是比较简单的,但是理解起来可能有点困难. 我最开始想到的是贪心法,每次消灭当前小行星最多的一行或一列.然而WA了.Discuss区里已经有高人给出反例. 下面给出正确的解法 我们把行和 ...
- 据说现在很缺设计师,阿里云的LOGO是用键盘打出来的……
今天,阿里云发布了自己的新LOGO,官方的解读是:“[]”这个呢其实是代码中常用的一个符号,代表着计算:中间的“—”则代表流动的数据.在官网等平台上,阿里云新LOGO是动态的,中间的“—”会匀速移动, ...
- Memcached 之取模与哈希算法命中率实验
当5台memcache服务器中有一台宕机时的命中率实验. 一.php实现代码 1. config.php $server = array( "A" => array(&quo ...
- python核心编程中的对象值比较VS对象身份比较(转载)
转载地址: https://blog.csdn.net/Mluka/article/details/51076786 在python核心编程第四章中,P69在优化下面这段代码时提出了:对象值比较VS对 ...
- 触发a标签
var aLink = document.createElement("a"); aLink.download = ''; aLink.href = url; if (docume ...
- vim/vi编辑器挂到后台ctrl + z
vim/vi编辑器通过CTRL+z将文件挂在到后台后,如果要再次进入,需通过jobs查看文件的序号,然后通过fg 序号进入文件进行编辑 (BaiduPictureToWord) [master@ins ...
- PAT_A1105#Spiral Matrix
Source: PAT A1105 Spiral Matrix (25 分) Description: This time your job is to fill a sequence of N po ...
- python 直接存入Excel表格
def write_excels(self, document): outwb = openpyxl.Workbook() outws = outwb.create_sheet(index=0) fo ...
- [Ynoi2016]掉进兔子洞 题解
题面传送门:https://www.luogu.org/problemnew/show/P4688 (温馨提示,请直接翻至题目描述部分) 1e5的数据范围,以及对区间每个权值出现次数取min此类主席树 ...
- 2、Linux的关机方式
shutdown 关机指令,你可以man shutdown 来看一下帮助文档.例如你可以运行如下命令关机: shutdown –h 10 ‘This server will shutdown afte ...