自定义容器
2018-08-30 23:38
369 查看
自定义容器
基于数组的IntArrayList自定义容器类,目标希望:
可以存储任意多个数据
可以存储任意数据类型
具体实现:
定义一个容器类IntArray
创建一个存放数据的数组,比如int[] arr = new int[10];
定义一个add方法,用于添加数据
创建容器对象,调用add方法,添加元素
代码实现
**IntArray.java
import java.util.Arrays; public class IntArray { private Object[] data; private int size; public IntArray() { this(6);//默认创建6个长度的数组 } public IntArray(int len) { data = new Object[len]; } /* add方法 */ public void add(Object obj) { if(size >= data.length) {//判断是否越界,如果越界则扩容 Object dataPlus = new Object[size+20]; System.arraycopy(data,0,dataPlus,0,size); data = dataPlus; } data[size++] = obj; } //getLength 获取容器长度 public int getLength() { return size; } //找到一个元素第一次出现的位置 public int getIndexByElement(Object obj) { for(int i = 0; i < size; i++) { if(data[i].equals(obj)) { return i; } } return -1; } //找到指定下标的元素 public Object getElementByIndex(int index) { if(index >=size) { throw new ArrayIndexOutOfBoundsException(); } return data[index]; } //删除指定下标元素 public void delElementByIndex(int index) { if(index >= size) { throw new ArrayIndexOutOfBoundsException(); } System.arraycopy(data, index+1, data, index, size-index-1); size--; } //删除指定元素 public void delElementByElement(Object obj) { int indexByElement = getIndexByElement(obj); delElementByIndex(indexByElement); } //toString public String toString() { Object arr = new Object[size]; Systen.arraycopy(data,0,arr,0;size); return Arrays.toString(arr); } }
基于变量的LinkedList
****LikedList.java
public class LikedList { Node first;//头结点 Node last;//尾节点 int size; public void add(Object obj) { Node node = new Node(obj); if(first == null) { first = node; last = node; }/*else { Node temp = first; while(temp.next != null) {//判断寻找尾节点 temp = temp.next; //如果该节点不为空,则移到下一节点继续判断 } temp.next = node; //找到尾节点,直接指向下一节点node }*/ last.next = node; last = node; size++; } @Override public String toString() { StringBuffer sb = new StringBuffer(); Node temp = first; sb.append("["); while(temp != null) { if(temp.next != null) { sb.append(temp.data).append(", "); }else { sb.append(temp.data); } temp = temp.next; } sb.append("]"); return sb.toString(); } private class Node { Object data;//用于存放数据 Node next;//用于存放下一个节点地址值 public Node(Object data) { this.data = data; } } }
数组与链表的优缺点相信也是有所了解的:
数组:适用于查询、排序等业务情况。连续存储
链表:适用于频繁增删改的业务情况。不连续存储
相关文章推荐
- [C/C++]反转链表
- Java 中初始化数组
- Dockly:从终端管理 Docker 容器
- 基于php数组中的索引数组和关联数组详解
- php关联数组与索引数组及其显示方法
- PHP重置数组为连续数字索引的几种方式总结
- php合并数组并保留键值的实现方法
- php取出数组单个值的方法
- php把字符串指定字符分割成数组的方法
- PHP实现根据数组某个键值大小进行排序的方法
- PHP实现的数组和XML文件相互转换功能示例
- Rancher:一个全面的可用于产品环境的容器管理平台
- Rancher:一个全面的可用于产品环境的容器管理平台
- docker 学习笔记(一)Docker的介绍与安装使用
- 7. 队列(2)
- 这20个Docker Command,有几个是你会的?
- 容器技术|Docker三剑客之docker-compose
- 容器技术|Docker三剑客之docker-machine
- Docker容器学习梳理--web管理工具(1)