ArrrayList底层代码的实现
定义变量
首先要想实现该块代码,必须定义三个私有变量。
private Object[] elementData;该变量用来存储容器中元素的个数。
private int size;该变量表示当前容器已经存在的元素个数;
private static finnal int FAULT_CAPACITY = 10;默认当前容器允许存储的元素个数为10个。
定义构造方法
其核心代码如下所示:
public Test(int index){
if(size<0){
throw new RunTimeException('容器容量不能为负数!");
}else if(size==0){
elementData = new Object[FAULT_CAPACITY];
}else{
elementData = new Object[index];
}
}
main主方法
其核心代码如下所示:
public static void main(String[] args){
Test t = new Test(2);
}
添加元素方法
其核心代码如下所示:
public void add(E element){
if(size==elementData.length){
Object[] newArray = new Object[elementData.length+(elementData.length>>1)];
System.arraycopy(elementData,0,newArray,0,elementData.length);
elementData = newArray;
}
elementData[size++] = element;
}
判断索引是否合法方法
其核心代码如下所示:
public void checkArrage(int index){
if(index<0||index>size-1){
throw new RunTimeException("当前索引不合法!+index");
}
获得元素个数方法
其核心代码如下所示:
public int size(){
return size;
}
判断容器是否为空方法
其核心代码如下所示:
public boolean isEmpty(){
return size==0?true:false;
}
获得指定位置元素方法
其核心代码如下所示:
public E get(int index){
checkArrage(index);
return (E)elementData[index];
}
移除元素方法
其核心代码如下所示:
public void move(E element){
for(int i=0;i<size;i++){
if(element.equals(get(i))){
}
}
}
移除指定位置元素方法
其核心代码如下所示:
public void move(int index){
checkArrage(index);
int nummoved = size-index-1;
if(nummoved>0){
System.arraycopy(elementData,index+1,elementData,index,nummoved){
}
elementData[--size] = null;
}
}
设定方法
其核心代码如下所示:
public void set(int index, E element){
checkArrage(index);
elementData[index] = element;
}
字符转换方法
其核心代码如下所示:
public String toString(){
StringBulider sb = new StringBulider();
sb.append('[');
for(int i=0;i<size;i++){
sb.append(elementData[i]+",");
}
sb.setCharAt(sb.length()-1,']');
return sb.toString();
}
PS:以上方法只需要在main方法里面调用就行。
ArrrayList底层代码的实现的更多相关文章
- java中CRUD(增删查改)底层代码的实现
java中CRUD(增删查改)底层代码的实现: package com.station.dao; import com.station.model.Product; import java.sql.* ...
- 底层代码创建GUI
%底层代码创建GUI hf = figure(... 'Units','Normalized',... 'Color','w',... 'Position',[0.1 0.1 0.8 0.8]); h ...
- JAVAEE——BOS物流项目02:学习计划、动态添加选项卡、ztree、项目底层代码构建
1 学习计划 1.jQuery easyUI中动态添加选项卡 2.jquery ztree插件使用 n 下载ztree n 基于标准json数据构造ztree n 基于简单json数据构造ztree( ...
- 图像的点运算----底层代码与Halcon库函数
最基本的图像分析工具----灰度直方图.使用直方图辅助,可以实现4大灰度变换,包括线性灰度变换(灰度拉伸).灰度对数变换.灰度伽马变换.灰度分段线性变换:使用直方图修正技术,可以实现2大变换,包括直方 ...
- Java反射简单使用--第一次细致阅读底层代码
1:所写的东西都经过验证,保证正确,环境jdk8,eclipse2:在例子中,尽量以生产环境中实际代码为例,那种固定值什么的没什么意义 问题: 1:想获取调用方法所需要的参数 2:参数是以json形式 ...
- ArrayList底层代码解析笔记
通过底层代码可以学习到很多东西: public class ArrayList<E> extends AbstractList<E> implements List<E& ...
- Nova创建虚拟机的底层代码分析
作为个人学习笔记分享.有不论什么问题欢迎交流! 在openstack中创建虚拟机的底层实现是nova使用了libvirt,代码在nova/virt/libvirt/driver.py. #image_ ...
- ceph 底层代码分享
一.底层工作队列 二.对象操作 三.上下文(Context)代码分析:
- LinkedList底层代码解析笔记
LinkedList是属于Sequence List,故遍历是用迭代器更快; LinkedList继承自AbstractSequenceList.实现了List及Deque接口.其实AbstractS ...
随机推荐
- 1、flink介绍,反压原理
一.flink介绍 Apache Flink是一个分布式大数据处理引擎,可对有界数据流和无界数据流进行有状态计算. 可部署在各种集群环境,对各种大小的数据规模进行快速计算. 1.1.有界数据流和无界 ...
- git .gitignore不生效
原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的. 解决方法: 1.先把规则写好,然后把规则对应的文件删了,然后 ...
- bootstrop设置背景图片自适应屏幕
如果不用bootstrop框架,想让背景图片自适应窗口大小,可以这样做: <style type="text/css"> html{height: %;} body.a ...
- web 之 tomcat 8.5 和9.0如何进入manager?
tomcat 8.5 和9.0如何进入manager? 第一步找到tomcat-user.xml文件 第二步添加如下代码 <role rolename="manager-gui&quo ...
- Google Play商店为预注册的游戏和应用提供自动安装功能
谷歌 Play 商店一直在准备一项功能,它可以自动安装用户预先注册的应用程序和游戏.似乎该功能现已开始向第一批用户推出.有些人在预注册时会看到一个新选项,使他们能够利用发布时自动安装的功能. 用户在 ...
- OSChina 周一乱弹 —— 为什么人类和人工智能定要一战
2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2018)请戳(这里) [今日歌曲] @小小编辑:推荐歌曲,又失恋了 - 花粥 <又失恋了>- 花 ...
- HDU 1874 畅通工程续 2008浙大研究生复试热身赛(2)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- python 安装模块之pip install +模块名的换源写法
1.采用国内源,加速下载模块的速度2.常用pip源(上一篇博客介绍过):– 豆瓣:https://pypi.douban.com/simple– 阿里:https://mirrors.aliyun.c ...
- Gitlab常规操作
一.Git和SVN的区别 和SVN类似,Git是一个版本控制系统(Version Control System,VCS),不同的是SVN为集中式版本控制系统,为单一的集中管理的服务器,保存所有文件的修 ...
- C. Helga Hufflepuff's Cup 树形dp 难
C. Helga Hufflepuff's Cup 这个题目我感觉挺难的,想了好久也写了很久,还是没有写出来. dp[i][j][k] 代表以 i 为根的子树中共选择了 j 个特殊颜色,且当前节点 i ...