package collection;

 import java.util.ArrayList;
import java.util.List; /**
* 自己实现一个ArrayList,帮助理解底层结构
* @author Nicholas
*
*/
public class SxArrayList{
private Object[] elementData;
private int size; public int size(){
return size;
}
public SxArrayList(){
this(10);//默认长度为10 } public SxArrayList(int initialCapacity){
if(initialCapacity<0){
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
elementData = new Object[initialCapacity];
} public boolean isEmpty(){
return size==0;
} public void add(Object obj){
//数组扩容和数据的拷贝
ensureCapacity();
elementData[size++] = obj;
} public Object get(int index){
rangeCheck(index);
return elementData[index];
} public void remove(int index){
rangeCheck(index);
//删除指定位置的对象
int numMoved = size-index-1;
if(numMoved>0){
System.arraycopy(elementData, index+1, elementData, size, numMoved);;
}
elementData[--size] = null;
} public void remove(Object obj){
for(int i=0;i<size;i++){
if(get(i).equals(obj)){//调用的是equals不是==
remove(obj);
}
}
} private void rangeCheck(int index){
if(size<0||index>=size){
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
} public Object set(int index,Object obj){
rangeCheck(index);
Object oldValue = elementData[index];
elementData[index] = obj;
return oldValue;
} public void add(int index,Object obj){
rangeCheck(index);
ensureCapacity();
System.arraycopy(elementData, index, elementData, index+1, size-index);
elementData[index] = obj;
size++;
} private void ensureCapacity(){
if(size == elementData.length){
Object[] newArray = new Object[size*2+1];
System.arraycopy(elementData, 0, newArray, 0, elementData.length);
elementData = newArray;
}
} public static void main(String[] args) {
SxArrayList list = new SxArrayList(3);
list.add("3333");
list.add("4444");
list.add("1111");
list.add("2222");
System.err.println(list.size);
System.err.println(list.get(3));
} }

102.自己实现ArrayList的更多相关文章

  1. 仿各种APP将文章DOM转JSON并在APP中以列表显示(android、ios、php已开源)

    背景 一直以来都想实现类似新闻客户端.鲜城等文章型app的正文显示,即在web editor下编辑后存为json,在app中解析json并显示正文. 网上搜过,没找到轮子.都是给的思路,然后告知是公司 ...

  2. java基础解析系列(十)---ArrayList和LinkedList源码及使用分析

    java基础解析系列(十)---ArrayList和LinkedList源码及使用分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder jav ...

  3. Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)

    Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ...

  4. ArrayList源码浅析

    这里只理解主要的常用方法: 1 public class ArrayList<E> extends AbstractList<E> 2 implements List<E ...

  5. Java第四天,随机数如何生成?ArrayList如何使用?

    虽然很多时候我们查阅Java API文档,但是对于一些必要的类,我们还是需要去了解的.因为这样的情况下,我们就可以尽量的去缩短开发的周期.接下来我们认识一下哪些API类是必须熟记的. Random 这 ...

  6. Java实现 LeetCode 102 二叉树的层次遍历

    102. 二叉树的层次遍历 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 2 ...

  7. ArrayList哪种遍历效率最好,你真的弄明白了吗?

    ArrayList简介 声明:以下内容都是基于jdk1.8的 ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了 ...

  8. Java集合详解(二):ArrayList原理解析

    概述 本文是基于jdk8_271版本进行分析的. ArrayList是Java集合中出场率最多的一个类.底层是基于数组实现,根据元素的增加而动态扩容,可以理解为它是加强版的数组.ArrayList允许 ...

  9. Entity Framework 6 Recipes 2nd Edition(10-2)译 -> 返回输出参数

    10-2. 返回输出参数 问题 想获取存储过程里的一个或多个输出参数的值 解决方案 假设我们有一个像Figure 10-1所示的,出租车辆与租金收入的模型 Figure 10-1.出租车辆与租金收入的 ...

随机推荐

  1. zabbix基础知识

    zabbix监控 初级 1.识别监控对象(分级) 2.理解监控对象(理论知识) 3.细分监控对象的指标 4.确定报警的基准线 预中级 1.工具化和监控分离 2.监控对象的分类 2.1硬件监控(方法:机 ...

  2. 解决ios10以上点击缩放的问题

    禁止ios10以上点击缩放,代码如下: <script> window.onload=function () { document.addEventListener('touchstart ...

  3. vue-element分页

    <template> <card-layout :title="L('Users')" :actions="actions" @click=& ...

  4. iot-hub运行在虚拟上

    ng  build gradlew build java -jar iot-hub-0.0.1-SNAPSHOT.jar 后台运行  nohup java -jar iot-dm-0.0.1-SNAP ...

  5. centos7安装Lua

    网官有介绍安装:http://www.lua.org/start.html 由于之前我遇到过致命错误并纪录在:https://blog.csdn.net/bingbingtea/article/det ...

  6. Linux用户群组权限恢复

    /etc/passwd:该文件用于存放用户详细信息:例如 root:x:0:0:root:/root:/bin/bash 用户id 0:就表示root用户 bin下的bash:表示可以登入操作系统 s ...

  7. 带上RESTful的金手铐,你累吗?

    1. 首先RESTful是一套规范,不是框架,它是来约束你的.也不关心生产效率的提高.就好像使用汇编开发应用,性能是快了,但是生产效率很低.RESTful它需要你在路由上定义很多规则来解释的URL,假 ...

  8. iOS库

    https://medium.com/app-coder-io/33-ios-open-source-libraries-that-will-dominate-2017-4762cf3ce449#.i ...

  9. python-lambda、filter、reduce、map

    python-lambda.map.filter.reduce lamdba python关键字,用于在表达式中创建匿名函数. 注意:lambda函数的定义体只能用纯表达式,不能赋值,不能使用whil ...

  10. vim 常用

    Format JSON :%!python -m json.tool 1. define custom function and use it define function in .vimrc fu ...