博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义容器
阅读量:6619 次
发布时间:2019-06-25

本文共 3368 字,大约阅读时间需要 11 分钟。

自定义容器

基于数组的IntArrayList

自定义容器类,目标希望:

  1. 可以存储任意多个数据
  2. 可以存储任意数据类型
    具体实现:
    • 定义一个容器类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;          }     }}

数组与链表的优缺点相信也是有所了解的:

数组:适用于查询、排序等业务情况。连续存储

链表:适用于频繁增删改的业务情况。不连续存储

转载于:https://blog.51cto.com/13907933/2167148

你可能感兴趣的文章
Exchange Server 2013 DAG高可用部署(二)-网络及先决条件准备
查看>>
我的友情链接
查看>>
以SYSTEM用户运行CMD
查看>>
企业Windows域环境中的组策略应用案例二
查看>>
shell编程基础总结
查看>>
图解Git
查看>>
禁止指定IP连接SQLSERVER
查看>>
性能测试技能树
查看>>
曙光云计算合作伙伴招募 VMware、永中软件等已加入
查看>>
Cocos网络篇[3.2](3) ——Socket连接(1)
查看>>
cocos2dx[3.4](25)——瓦片地图TiledMap
查看>>
linux运维笔记-linux文件系统
查看>>
7. Reverse Integer
查看>>
Juniper SSG 防火墙端口映射(图文)
查看>>
linux进程优先级
查看>>
管理后台的登录功能-重新思考
查看>>
Esxi 下虚拟主机安装Vmware Tools
查看>>
vim的用法
查看>>
我的友情链接
查看>>
mysql备份工具mysqldump和mydumper的备份效率比较
查看>>