使用数组实现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);可以用折半查 ...
随机推荐
- 三维重建面试0:*SLAM滤波方法的串联综述
知乎上的提问,高翔作了回答:能否简单并且易懂地介绍一下多个基于滤波方法的SLAM算法原理? 写的比较通顺,抄之.如有异议,请拜访原文.如有侵权,请联系删除. 我怎么会写得那么长--如果您有兴趣可以和我 ...
- js-构造数组
js中,字符串的特性跟数组非常类似.数组是一种很重要的数据结构.在java中,数组声明的时候就要为其指定类型,数组中只能放同一种类型的数据.Js中的数组可以放不同的类型,但是是有序的,类似于java中 ...
- 减小数据库Log文件大小 1MB 为自定义大小
--减小数据库Log文件大小 1MB 为自定义大小USE [master]GOALTER DATABASE DataBaeName SET RECOVERY SIMPLE WITH NO_WAITGO ...
- [系统资源]/proc/meminfo和free输出解释
High Level statistics RHEL 5, RHEL 6 and RHEL 7 MemTotal: Total usable memory MemFree: The amount of ...
- [Kernel参数]----/etc/sysctl.conf
修改sysctl方法 方法一:修改/proc下内核参数文件内容 直接修改内核参数ip_forward对应在/proc下的文件/proc/sys/net/ipv4/ip_forward.用下面命令查看i ...
- [NOIP2018模拟赛]d
d题大概是让有n个矩阵,可以随意平移,问删除m个矩阵后最大的面积交是多少. 其实思路很显然. 肯定删x个a最小的和m-x个b最小的. 然后我们先删m个a最小的,然后逐渐少删a,开始删b,用个堆维护b的 ...
- idea整合eclipse后快捷键
- 06.系统编程-3.进程VS线程比较
1.定义的不同 ==进程是系统进行资源分配和调度的一个独立单位.== ==线程是进程的一个实体,是CPU调度和分派的基本单位==,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只 ...
- 继续聊WPF
下面看一个Tick控件的例子,这只是演示,Tick单独使用没有意义. <TickBar Height="15" Width="180" Ticks=&qu ...
- Git 基础教程 之 创建与合并分支