手写实现List接口的ArrayList类

接口  MyLlist.java

 1 package cn.ftf.myarraylist;
 2
 3 public interface MyList {
 4     public void clear();
 5     public boolean isEmpty();
 6     public int length();
 7     public Object get(int i) throws Exception;
 8     public void add(Object obj);
 9     public void inset(int i,Object obj) throws Exception;
10     public void remove(int i) throws Exception;
11     public int indexOf(Object obj);
12     public void display();
13 }

集合类  MyArrayList.java

 1 package cn.ftf.myarraylist;
 2
 3 public class MyArrayList implements MyList{
 4     private Object[] obj;
 5     private int a=3;
 6     private int curLen=0;
 7
 8
 9     public MyArrayList() {
10         super();
11         obj=new Object[a];
12     }
13
14     @Override
15     public void clear() {
16         curLen=0;
17     }
18
19     @Override
20     public boolean isEmpty() {
21         return curLen==0;
22     }
23
24     @Override
25     public int length() {
26         return curLen;
27     }
28
29     @Override
30     public Object get(int i) throws Exception{
31         if(i<0||i>curLen-1) {
32             throw new Exception("第"+i+"个元素不存在!");
33         }
34         return obj[i];
35     }
36
37     @Override
38     public void add(Object obj) {
39         if(curLen==a) {
40             a=a*2;
41             Object [] b=this.obj;
42             this.obj=new Object[a];
43             for(int i=0;i<=curLen-1;i++) {
44                 this.obj[i]=b[i];
45             }
46         }
47         this.obj[curLen]=obj;
48         curLen++;
49     }
50     @Override
51     public void inset(int i, Object obj) throws Exception{
52         if(i<0||i>curLen) {
53             throw new Exception("插入位置非法!");
54         }
55         if(curLen==a) {
56             a=a*2;
57             Object [] b=this.obj;
58             this.obj=new Object[a];
59             for(int i1=0;i1<=curLen-1;i1++) {
60                 this.obj[i1]=b[i1];
61             }
62         }
63         for(int ii=curLen-1;ii>=i;ii--) {
64             this.obj[ii+1]=this.obj[ii];
65         }
66         this.obj[i]=obj;
67         curLen++;
68     }
69
70     @Override
71     public void remove(int i) throws Exception {
72         if(i<0||i>curLen) {
73             throw new Exception("移除位置非法!");
74         }
75         for(int ii=i+1;ii<=curLen;ii++) {
76             obj[ii]=obj[ii-1];
77         }
78         curLen--;
79     }
80
81     @Override
82     public int indexOf(Object obj) {
83         for(int i=0;i<=curLen;i++) {
84             if(this.obj[i].equals(obj)) {
85                 return i;
86             }
87         }
88         return -1;
89     }
90
91     @Override
92     public void display() {
93         for(int i=1;i<=curLen;i++) {
94             System.out.println(obj[i-1]+"  ");
95         }
96
97     }
98
99 }

测试类  Test01.java

 1 package cn.ftf.myarraylist;
 2
 3 public class Test01 {
 4     public static void main(String[] args) throws Exception {
 5         MyArrayList ma=new MyArrayList();
 6         MyList ml=new MyArrayList();
 7         ml.add(1);
 8         ml.add("hello");
 9         ml.add(2);
10         ml.add("word");
11         ml.display();
12
13         System.out.println(ml.get(3));
14         ml.inset(3, "插入的");
15         ml.inset(3, "插入的2");
16         ml.display();
17         System.out.println(ml.length());
18         System.out.println(ml.isEmpty());
19         ml.clear();
20         System.out.println(ml.isEmpty());
21
22
23     }
24
25 }/*运行结果:(无差错)1  hello  2  word  word1  hello  2  插入的2  插入的  word  6falsetrue*/

原文地址:https://www.cnblogs.com/fangtingfei/p/11261592.html

时间: 2024-10-17 01:21:23

手写实现List接口的ArrayList类的相关文章

MyBatis原理总结(手写实现类)

我们在实际开发中,越简单越好,所以都是采用不写Dao实现类的方式.不管是使用xml还是直接配置. 但是MyBatis是支持写Dao实现类的 注意sqlSession是这里面的一个灵魂,有很多执行api 目录结构: 方法: /** * 用户的持久层接口 */ public interface IUserDao { List<User> findAll(); } 实现类: public class UserDaoImpl implements IUserDao { private SqlSessi

接口的实现类不支持@Override注解,提示移除

写了一个接口的实现类,在方法的前面加了@Override居然报错了,要求移除这个注解.据说这个是JDK的版本问题,@Override在JDK5就已经有了,但是有一个小小的BUG就是不支持对接口的实现,认为这不是Override而JDK6修正了这个BUG,无论是对父类的方法覆盖还是对接口的实现都可以加上@Override. 首先要确保安装jdk1.6,然后在eclispe中修改配置,在windows->preferences->java->complier->compiler com

MFC 程序 手写创建顺序

MFC 程序 手写创建顺序 1.继承CWinApp类 覆盖 class CMyApp : public CWinApp { virtual BOOL InitInstance(); } BOOL CMyApp::InitInstance() { CMyFrameWnd *pWnd = new CMyFrameWnd(); pWnd->ShowWindow(SW_SHOW); m_pMaindWnd = pWnd; return TRUE; } 2.继承 CFrameWnd类 class CMyF

1 手写ArrayList核心源码

手写ArrayList核心源码 ArrayList是Java中常用的数据结构,不光有ArrayList,还有LinkedList,HashMap,LinkedHashMap,HashSet,Queue,PriorityQueue等等,我们将手写这些常用的数据结构的核心源码,用尽量少的代码来揭示核心原理. 下面我们来手写ArrayList的核心源码 首先我们定义一个QArrayList,不要问为什么叫QArrayList,因为我之前写过Qt,仅此而已.源码 public class<T> QAr

java的List接口的实现类 ArrayList,LinkedList,Vector 的区别

Java的List接口有3个实现类,分别是ArrayList.LinkedList.Vector,他们用于存放多个元素,维护元素的次序,而且允许元素重复. 3个具体实现类的区别如下: 1. ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制.移动.代价比较高.因此,它

攻占SSM之手写Mybatis的xml实现Dao层接口

上午写了一个简单的 从xml读取信息实例化一个Bean对象.下午就开始想mybatis是怎么通过xml文件来实现dao层接口的,一开始想直接用Class.forName(String name)然后调用getMethods的办法来得到Dao接口所有的方法Method,结果证明这对接口实没有用的,会报一个错误.于是想百度,但是百度的结果全是怎么配置mapper的..然后我又四处翻资料,终于找到一些办法.最后我还是用到了我自己封装的DButil 和 DataUtil两个类. 反正我是这么实现的,至于

手写ArrayList

ArrayList是Java中最为简单也是最为常用的一个容器,那么它的内部构造是什么呢?其实ArrayList的底层实现就是数组,它的各种方法就是对数组进行的一系列操作,例如对数组元素的修改,删除,位移,对数组长度的获取等.我们可以手写一个ArrayList容器,以助我们更好的理解这个容器: package Collection; import java.util.Iterator; /** * 深入迭代器的原理-->一个容器可以创建多个迭代器对象 * 1.使用了内部类,实现迭代器 * 2.使用

带你手写基于 Spring 的可插拔式 RPC 框架(四)代理类的注入与服务启动

上一章节我们已经实现了从客户端往服务端发送数据并且通过反射方法调用服务端的实现类最后返回给客户端的底层协议. 这一章节我们来实现客户端代理类的注入. 承接上一章,我们实现了多个底层协议,procotol 有 netty,http,和 socket 三个实现类,每个实现类都有启动服务端和客户端发送数据两个方法. 问题 如何实现底层协议的选择那? 可以通过配置文件来选择协议. 单独的配置文件还是和 Spring 的配置文件结合起来那? 我们选择与 Spring 结合的配置文件,自定义一些属性的标签,

对服务器端接口的调用,自己手写了一个脚本,但返回信息的中文总是乱码(这个方法很不错,重要的是解决思路,寻找手写脚本与录制脚本 生成目录文件的区别)

对服务器端接口的调用,自己手写了一个脚本,但返回信息的中文总是乱码.在网上搜索了很多方法,包括: 1.Tools->Recording Options->Advanced->勾选Support charset UTF-8 2.Run-time Settings->Browser->Browser Emulation->Change,将language置为中文 3.web_add_auto_header("Accept-Language","