《Java语言程序设计》P327

题目要求使用数组来模拟实现ArrayList的一些方法,并要求可以根据实际长度来实现数组自动增长,这里只贴出LikeArrayList.java

测试方法已经在本地写过,有点杂乱就不再贴出。

缺陷:无法实现自增长;基于String为数组类型的设计,数组若为其他类型,有些方法会不能正常工作。

改进:判断数组类型,并作出相应的解决方案的写法已经想好,实现起来应该不难,但考虑到比较繁琐费时,不再添加。

Ps.LikeArrayList方法可以改写成:

    public void LikeArrayList() {
        Object[] ArrayLi = new Object[20];
        ArrayLiLike = ArrayLi;
    }

似乎没有什么变化,若实现自增长,可以尝试在LikeArrayList方法上做改动,还没想好解决方案。

话说回来,如果要实现自增长,为何不直接用java.util.ArrayList?

public class LikeArrayList {
    private Object[] ArrayLiLike = new Object[20];

    public void LikeArrayList() {

    }

    public void add(Object n){
        int m =0;
        for (int i = 0; i < ArrayLiLike.length; i++) {
            if(ArrayLiLike[i] == null){
                m = i;
                break;
            }
        }
        ArrayLiLike[m] = n;
    }

    public void add(int p , Object n){
        ArrayLiLike[p] = n;
    }

    public void clear(){
        for (int i = 0; i < ArrayLiLike.length; i++) {
            ArrayLiLike[i] = null;
        }
    }

    public boolean contains(Object h){
        boolean c = false;
        for (int i = 0; i < ArrayLiLike.length; i++) {
            if (ArrayLiLike[i] == h) {
                c = true;
            }
        }
        return c;
    }

    public Object get(int b){
        return ArrayLiLike[b];
    }

    public int indexOf(Object w){
        int a = 0;
        for (int i = 0; i < ArrayLiLike.length; i++) {
            if(ArrayLiLike[i] == w){
                a = i;
                break;
            }
        }
        return a;
    }

    public boolean isEmpty(){
        boolean is = true;
        for (int i = 0; i < ArrayLiLike.length; i++) {
            if(ArrayLiLike[i] != null){
                is = false;
                break;
            }
        }
        return is;
    }

    public int lastIndexOf(Object w){
        int a = 0;
        for (int i = 0; i < ArrayLiLike.length; i++) {
            if(ArrayLiLike[i] == w){
                a = i;
                continue;
            }
        }
        return a;
    }

    public boolean remove(Object re){
        boolean in = false;
        for (int i = 0; i < ArrayLiLike.length; i++) {
            if(ArrayLiLike[i] == re){
                in = true;
                ArrayLiLike[i] = null;
                break;
            }
        }
        return in;
    }

    public int size(){
        return ArrayLiLike.length+1;
    }

    public boolean remove(int re){
        boolean in = false;
        if (ArrayLiLike[re] != null){
            in = true;
            ArrayLiLike[re] = null;
        }else{
            in = false;
        }
        return in;
    }

    public Object set(int p, Object o){
        ArrayLiLike[p] = o;
        return ArrayLiLike[p];
    }

    public String toString(){
        String s = new String();
        for (int i = 0; i < ArrayLiLike.length; i++) {
            s += ArrayLiLike[i] + " ";
        }
        return s;
    }
}

Chp11 11.7的更多相关文章

  1. 地区sql

    /*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : lo ...

  2. WinForm 天猫2013双11自动抢红包【源码下载】

    1. 正确获取红包流程 2. 软件介绍 2.1 效果图: 2.2 功能介绍 2.2.1 账号登录 页面开始时,会载入这个网站:https://login.taobao.com/member/login ...

  3. C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)

    #include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...

  4. CSS垂直居中的11种实现方式

    今天是邓呆呆球衣退役的日子,在这个颇具纪念意义的日子里我写下自己的第一篇博客,还望前辈们多多提携,多多指教! 接下来,就进入正文,来说说关于垂直居中的事.(以下这11种垂直居中的实现方式均为笔者在日常 ...

  5. C++ 11 多线程--线程管理

    说到多线程编程,那么就不得不提并行和并发,多线程是实现并发(并行)的一种手段.并行是指两个或多个独立的操作同时进行.注意这里是同时进行,区别于并发,在一个时间段内执行多个操作.在单核时代,多个线程是并 ...

  6. CSharpGL(11)用C#直接编写GLSL程序

    CSharpGL(11)用C#直接编写GLSL程序 +BIT祝威+悄悄在此留下版了个权的信息说: 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharp ...

  7. ABP(现代ASP.NET样板开发框架)系列之11、ABP领域层——仓储(Repositories)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是“ASP.NET Boilerplate Proj ...

  8. C++11 shared_ptr 智能指针 的使用,避免内存泄露

    多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...

  9. C++11网络编程

    Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...

随机推荐

  1. Codeforces Round #383 (Div. 2) 解题报告

    本来是打算所有半夜进行的CF都不参加的,但看到这次比赛22:35就开始,还是没有忍住orz--晚上总是不够清醒,做题思维不如白天活跃,低级错误常常出现.出的比较早的C因为一个书写错误有点小bug,在比 ...

  2. 转一个 Xcode 7 缺少 *.dylib库的解决方法

    Xcode7中 Link Binary With Libraries 没有 .dylib库,只能找到对应的 .tbd,但不能代替使用,通过查找资料,尝试后得到以下两种解决方法. 方法1. (heqin ...

  3. Mybatis中#{}和${}传参的区别

    1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111&qu ...

  4. SQL 常用函数

    --将字符串中从某个字符开始截取一段字符,然后将另外一个字符串插入此处  select stuff('hi,world!',4,4,'****') --返回值hel****orld!  --返回从指定 ...

  5. DotNetBar for Windows Forms 12.2.0.7_冰河之刃重打包版原创发布-带官方示例程序版

    关于 DotNetBar for Windows Forms 12.2.0.7_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

  6. linux查看系统命令

    [root@server ~] # uname –a                       # 查看内核/操作系统/CPU信息的linux系统信息命令 [root@server ~] # hea ...

  7. Jetty和tomcat的对比

    上周面试一个来自百度的员工,其中提到一个监控项目,使用jetty容器提供rest api服务,一直懵懂jetty /tomcat这些容器的区别,周末查了下,下面这个说的简单明了~ 转自:http:// ...

  8. c语言实现牛顿迭代法

    #include<stdio.h> #include<stdlib.h> #include<math.h> #include<float.h> #inc ...

  9. Java泛型学习笔记 - (六)泛型的继承

    在学习继承的时候, 我们已经知道可以将一个子类的对象赋值给其父类的对象, 也就是父类引用指向子类对象, 如: Object obj = new Integer(10); 这其实就是面向对象编程中的is ...

  10. C++Primer 一

    1.vertor和数组的区别: 数组的长度固定.而且程序是无法知道一个给定数组的长度,数组没有获取器容量大小的size操作,也不提供puch_back操作在其中自动添加元素 2.数组定义中的类型可以示 ...