数组的扩容
来源:互联网 发布:linux服务器编程 知乎 编辑:程序博客网 时间:2024/06/06 00:29
通过对List接口的实现类ArrayList的常见方法的应用
package com.bjsxt.list; public class SxtArrayList { private Object[] elementData; private int size; public int size() { return size; } public boolean isEmpty() { return size == 0; } public SxtArrayList() { this(10); } public SxtArrayList(int initialCapacity) { if (initialCapacity < 0) { try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } } elementData = new Object[initialCapacity]; } public void add(Object obj) { // 数组扩容 if (size == elementData.length) { Object[] newArray = new Object[size * 2 + 1]; System.arraycopy(elementData, 0, newArray, 0, elementData.length); /* * for (int i = 0; i < elementData.length; i++) { * newArray[i]=elementData[i]; } */ elementData = newArray; } elementData[size++] = obj; // size++; } 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); /* * for (int i = 0; i < elementData.length; i++) { * newArray[i]=elementData[i]; } */ elementData = newArray; } } public Object get(int index) { rangeCheck(index); return elementData[index]; } public void remove(int index) { rangeCheck(index); // 删除指定位置的对象 // a b c d e if (index < 0 || index >= size) { try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } int numMoved = size - index - 1; if (numMoved > 0) { System.arraycopy(elementData, index + 1, elementData, index, numMoved); } elementData[--size] = null; } } public void remove(Object obj) { for (int i = 0; i < size; i++) { if (get(i).equals(obj)) {// 注意:底层调用的equals方法,不是==; remove(i); } } } public Object set(int index, Object obj) { rangeCheck(index); Object oldValue = elementData[index]; elementData[index] = obj; return oldValue; } private void rangeCheck(int index) { if (index < 0 || index >= size) { try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { SxtArrayList slist = new SxtArrayList(3); slist.add(132); slist.add("444"); slist.add(5); slist.add("333"); slist.add("333"); slist.add("abc"); slist.add("ccc"); System.out.println(slist.size); System.out.println(slist.get(6)); }}
阅读全文
0 0
- Java数组的扩容
- Java数组的扩容
- 数组的扩容
- 数组的扩容
- 数组的自动扩容问题
- Java中数组的扩容
- 数组扩容
- 数组扩容
- 数组扩容
- 数组扩容
- 数组扩容
- 数组扩容
- 关于java数组的扩容问题
- java数组自动扩容的方法。
- 数组是如何实现扩容的
- 变长数组vla(realloc的扩容)
- java数组与容器之间的转换,实现数组扩容
- java数组与容器之间的转换,实现数组扩容
- oracle 表空间
- sublime3安装插件实现前端自动刷新
- postgresql 触发器 简介(转)
- opencv报错
- 第三方分享微信分享、朋友圈分享之iOS开发/Android开发
- 数组的扩容
- Linux下的SVN服务器的安装
- java版云笔记(二)
- CSS垂直居中实现
- 贝塞尔曲线收录:二 cell描三边
- java.lang.IllegalArgumentException: FormUrlEncoded can only be specified on HTTP methods with requ
- TransactionScope的使用--业务层使用多个方法实现回滚解决方案-业务层事务
- **A Cubic number and A Cubic Number**
- 【移动端】仿hover效果触发导航菜单展开