《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. thunkify 模块

    function thunkify(fn){ assert('function' == typeof fn, 'function required'); return function(){ var ...

  2. UVA 11297 线段树套线段树(二维线段树)

    题目大意: 就是在二维的空间内进行单个的修改,或者进行整块矩形区域的最大最小值查询 二维线段树树,要注意的是第一维上不是叶子形成的第二维线段树和叶子形成的第二维线段树要  不同的处理方式,非叶子形成的 ...

  3. Adding a WebPart to a SharePoint 2013 Master Page 分类: Sharepoint 2015-07-08 01:03 7人阅读 评论(0) 收藏

    On SharePoint 2013 you can not add the Web Parts to the master page the same way of 2010. Please use ...

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

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

  5. memset函数详解

    语言中memset函数详解(2011-11-16 21:11:02)转载▼标签: 杂谈 分类: 工具相关  功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大 ...

  6. google closure--继承模块一:goog.inherits()

    最近在项目是使用了google closure框架,深入研究了一下源码,先从最简单的继承系统吧. 废话不多说,closure继承模块主要有2个API: goog.inherits(childCtor, ...

  7. AppCode 2016.2.3 发布,支持 Swift3 的特性

    AppCode 2016.2.3 (build 162.2380.5)发布了,AppCode 是一个全新的 Objective-C.Swift 的集成开发环境,用于帮助开发 Mac.iPhone 和 ...

  8. C#版的mongodb最新的官方驱动2.4.0版本

    已经升级了mongodb至最新的3.4的版本,我想想也该把驱动升到最新的了,我用的驱动还是1.7的版本呢,之前几次想升级,都是因为升级驱动需要改动的代码太大了,升级的成本很高,所以懒得动,就这么的用了 ...

  9. CSS3 Gradient

    CSS3CSS3发布很久了,现在在国外的一些页面上常能看到他的身影,这让我羡慕已久,只可惜在国内为了兼容IE,让这一项技术受到很大的限制,很多Web前端人员都望而止步.虽然如此但还是有很多朋友在钻研C ...

  10. 我的第一个HTML的程序

    <html> <head><title>title为显示标签页的内容</title></head> <body> <h1& ...