自己模拟ArrayList:

 private Object[] elementData;

    private int size;

    // 可以指定集合大小,默认10
public MyArrayList(int initialCapacity) {
if (initialCapacity < 0) {
try {
throw new IllegalArgumentException("Illegal Capacity: " + initialCapacity);
} catch (Exception e) {
e.printStackTrace();
}
}
elementData = new Object[initialCapacity];
} // 无参构造
public MyArrayList() {
this(10);
} // 返回集合大小
public int size() {
return size;
} // 返回集合大小
public boolean isEmpty() {
return size == 0;
} // 根据索引获取对象
public Object get(int index) {
rangeCheck(index);
return elementData[index];
} // 添加元素
public void add(Object object) {
ensureCapacity();
elementData[size++] = object;
} // 根据索引删除
public void remove(int index) {
rangeCheck(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index + 1, elementData, index, numMoved);
elementData[--size] = null;
} // 根据对象删除
public void remove(Object object) {
for (int i = 0; i < size; i++) {
if (get(i).equals(object)) {
remove(i);
}
}
} // 替换
public Object set(int index, Object object) {
rangeCheck(index);
Object oldValue = elementData[index];
elementData[index] = object;
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;
}
} // 封装判断index是否合法
private void rangeCheck(int index) {
if (index >= size) {
try {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
} catch (Exception e) {
e.printStackTrace();
}
}
} public static void main(String[] args) {
MyArrayList list = new MyArrayList();
list.add("333");
list.add("444");
list.add("555");
list.add("344433");
list.add("222");
list.add("666");
list.remove("5");
list.set(0, "4432432");
list.add(5, "111");
System.out.println(list.size);
// System.out.println(list.get(6));
}

java学习容器的更多相关文章

  1. java中容器的学习与理解

    以前一直对于java中容器的概念不理解,虽然学习过,但始终没有认真理解过,这几天老师提出了这样一个问题,你怎么理解java中的容器.瞬间就蒙了.于是各种搜资料学习了一下,下面是我学习后整理出来的的一些 ...

  2. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  3. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  4. Java学习笔记,前两章总结

    第一章 Java平台概论 1.Java不仅仅是个程序语言,代表解决问题的平台,代表了原厂.各个厂商.社群.开发者与用户沟通的成果. 2.Java三大平台,从J2SE.J2EE.J2ME到Java SE ...

  5. Java学习第一天

    Java学习第一天 对于网络管理员或者黑客必须知道的八个cmd命令 详情请参考:http://www.2cto.com/os/201608/533964.html          nbtstat  ...

  6. java学习路线(好资源大家分享)

    对于入门java将近两年的时间,曾经迷惘过,一直想知道java的具体学习路线,看过了许许多多的java经验分享的帖子,评论,以及其他各种培训机构所谓的学习路线,发现没有一个符合我个人需求的学习路线,根 ...

  7. 转:Java学习路线图

    作者: nuanyangyang 标  题: Java学习路线图(整理中,欢迎纠正) 发信站: 北邮人论坛 (Mon Aug 11 19:28:16 2014), 站内   [以下肯定是不完整的列表, ...

  8. 【转】Java学习之Iterator(迭代器)的一般用法 (转)

    [转]Java学习之Iterator(迭代器)的一般用法 (转) 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭 ...

  9. Java学习笔记--Swing用户界面组件

    很多与AWT类似. 事件处理参考:Java学习笔记--AWT事件处理 1.设计模式: 模型:存储内容视图:显示内容控制器:处理用户输入· 2. 文本输入常用组件 2.1 文本域: JLabel lab ...

随机推荐

  1. AngularJs Test demo &front end MVVM implementation conjecture and argue.

    <!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...

  2. Java SE series:1. environment configure and Hello world! [We use compiler and packager to create an application!]

    1. cli (command line interface) and gui (graphic user interface) use javahome path, search classpath ...

  3. C++之路进阶——bzoj3262(陌上花开)

    F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser  gryz2016 Logout 捐赠本站 Notice:由于本OJ ...

  4. java中hashCode()方法的作用

    hashcode方法返回该对象的哈希码值.      hashCode()方法可以用来来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的位置,Map在搜索一个对象的时候先 ...

  5. windows下 mysql忘记密码怎么办

    第一种: 1. 关闭正在运行的MySQL服务. (先查看mysql是否重命名,net start)2. 打开DOS窗口,转到mysql\bin目录. 3. 输入mysqld --skip-grant- ...

  6. sql 中的回车和换行问题

    --移除回车符 update master_locationSET street_number = REPLACE(street_number, CHAR(13), '') --移除换行符 updat ...

  7. 《科学》封面:人工智能终于能像人类一样学习 zz

    原文地址:http://tech.sina.com.cn/d/i/2015-12-12/doc-ifxmpnqi6368668.shtml science   Human-level concept ...

  8. JSP-02- 使用JSP实现输出

    二. 使用JSP实现输出 JSP的页面构成: 静态内容.指令.表达式.Scriptlet.声明.动作.注释 Jsp脚本: 表达式.Scriptlet.声明 表达式: <%=  内容  %> ...

  9. 关于mac book 的启动选项

    苹果电脑是用EFI的,没有BIOS,唯一可以设置的是开机的启动选项.可以在基于 Intel 的 Mac 电脑上使用下列启动键组合启动时按住 C 键——从可启动 CD 或 DVD 光盘启动,如随机附带的 ...

  10. Java的多线程+Socket 后台 Ver 2.0

    package com.wulala; import java.io.IOException;import java.net.ServerSocket;import java.net.Socket; ...