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的效果的更多相关文章

  1. (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)

    目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...

  2. C#中数组、ArrayList和List三者的区别

    在C#中数组,ArrayList,List都能够存储一组对象,那么这三者到底有什么样的区别呢. 数组 数组在C#中最早出现的.在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. ...

  3. C# 数组,ArrayList与List对象的区别

    在C#中,当我们想要存储一组对象的时候,就会想到用数组,ArrayList,List这三个对象了.那么这三者到底有什么样的区别呢? 我们先来了解一下数组,因为数组在C#中是最早出现的. 数组 数组有很 ...

  4. C#中数组、ArrayList和List<T>三者的发展历程

    在C#中数组,ArrayList,List使我们用的最多的类型之一.他们共同的作用都是能够存储一组对象. 那么问题来了: (1)为什么要有三个一样作用的东西呢?他们都很完美吗? (2)谁先出生,又是因 ...

  5. 在Java中怎样把数组转换为ArrayList?

    翻译自:How to Convert Array to ArrayList in Java? 本文分析了Stack Overflow上最热门的的一个问题的答案,提问者获得了很多声望点,使得他得到了在S ...

  6. Java学习笔记51:数组转ArrayList和ArrayList转数组技巧

    ArrayList转数组: public class Test { public static void main(String[] args) { List<String> list = ...

  7. C#中数组,ArrayList与List对象的区别

    在C#中,当我们想要存储一组对象的时候,就会想到用数组,ArrayList,List这三个对象了.那么这三者到底有什么样的区别呢? 我们先来了解一下数组,因为数组在C#中是最早出现的. 数组 数组有很 ...

  8. C# 数组、ArrayList、List、Dictionary的用法与区别

    前言 在工作中经常遇到C#数组.ArrayList.List.Dictionary存取数据,但是该选择哪种类型进行存储数据,对于初学者的我一直不知道该怎么取舍.于是抽空好好看了下他们的用法和比较,在这 ...

  9. 数组,arrayList和List

    数组,arrayList和List (1)数组在C#中是最早出现的.它在内存中是连续的存储的,所以索引速度很快,而且赋值与修改元素也很简单.可以利用偏移地址访问元素,时间复杂度为O(1);可以用折半查 ...

随机推荐

  1. 分布式机器学习框架:MxNet 前言

           原文连接:MxNet和Caffe之间有什么优缺点一.前言: Minerva: 高效灵活的并行深度学习引擎 不同于cxxnet追求极致速度和易用性,Minerva则提供了一个高效灵活的平台 ...

  2. C# for 遍历 IPagedList

    IPagedList<Doc> ss = Doclist.ToPagedList(page, pageSize); ;i<ss.Count;i++) { var yy = ss[i] ...

  3. Apex语言(六)数组

    1.数组 数组能保存多个数据,每一个数据称为数组元素,元素的个数称为数组的长度. 数组元素的类型必须相同,元素的类型就是数组的类型. 数组元素在数组中都有一个编号,称为数组下标.下标从0开始编号,通过 ...

  4. vue组件的拆分

    vue组件的拆分 <div class="div"> <!-- 拆分出来的组件 自定义名字moban --> <moban></moban ...

  5. swiper 滑动获取当前第几页下标

  6. HDU 2268 How To Use The Car (数学题)

    题目 //做起来很艰辛,总结起来很简单... //注意步行速度可能比车的速度快.... //推公式要仔细,,,, //一道对我来说很搞脑子的数学题,,,,, //车先送第一个人上路,第二个人步行:中途 ...

  7. 类型信息、异常、I/O流(day11)

    二十三 运行时的类型信息 typeid运算符 #include <typeinfo> typeid(类型/对象) )返回typeinfo的对象,用于描述类型信息. )在typeinfo类中 ...

  8. c# 数组 字符串 C#中判断字符串中包含某个字符

    string str = "1,2,3,4,5,6,7";            string[] strArray = str.Split(','); //字符串转数组      ...

  9. dubbo-源码阅读之javaspi&javasist简单使用

    dubbo可扩展的点的类的对象创建 都是用类似javaspi和javasist的思想来做的.所以看后面代码 先熟悉一下java的SPI和javasist的使用 如ServicesConfig的代码 p ...

  10. mysql绑定多个ip地址

    http://jpuyy.com/2013/07/mysql-bind-multi-address.html mysql绑定多个ip地址 发表于2013 年 7 月 1 日 my.cnf中有选项bin ...