黑马程序员技术交流社区
标题:
求代码
[打印本页]
作者:
陈永波
时间:
2012-6-30 22:22
标题:
求代码
本帖最后由 陈永波 于 2012-7-1 22:04 编辑
import java.util.List;
public class MyArraylistDemo {
private Object[] arr = new Object[10];
private int size;
public void add(Object obj){
if(size==arr.length){
Object[] newArr = new Object[arr.length*3/2 +1];
System.arraycopy(arr, 0, newArr, 0, size);
arr = newArr;
}
arr[size++] = obj;
}
public void add(int index, Object obj){
if(size==arr.length){
Object[] newArr = new Object[arr.length*3/2 +1];
System.arraycopy(arr, 0, newArr, 0, size);
arr = newArr;
}
System.arraycopy(arr, index, arr, index + 1, size-index);
arr[index] = obj;
size++;
}
public void remove(int index){
}
public void remove(Object obj){
}
public void set(int index, Object obj){
if(index >= size){
throw new ArrayIndexOutOfBoundsException("Index" + index + ", size" + size);
}
arr[index] = obj;
}
public Object get(int index){
if(index >= size){
throw new ArrayIndexOutOfBoundsException("Index" + index + ", size" + size);
}
return arr[index];
}
public void addAll(List list){
for(int i = 0; i < list.size(); i++){
add(list.get(i));
if(size==arr.length){
Object[] newArr = new Object[arr.length*3/2 +1];
System.arraycopy(arr, 0, newArr, 0, size);
arr = newArr;
}
}
}
public int size(){
return size;
}
public void clear(){
}
}
求 public void remove(int index){}
public void remove(Object obj){}健壮代码 自己没什么思路了
作者:
Forever。
时间:
2012-6-30 23:14
楼主先给你提供一个思路吧,remove方法的返回值肯定是一个object类型的,返回的东西就是你去掉的那个元素。
所以基于这个需求,在看你的两个方法:
public void remove(int index){}
首先第一个方法要求传一个int值进来,也就是你要取走的值是第几个。你在代码中实现可以这样,首先你的要把原来的元素中的第index元素找出来,
然后新建一个新的object数组存放没有这个元素的剩下的元素 具体看代码,其实就是个错位:
public Object remove(int index)
{
Object o = arr[index];
Object[] temp = arr;
arr = new Object[arr.length-1];
for(int i = 0 ; i < arr.length ; i ++)
{
if(i>=index)
{
arr[i] = temp[i+1];
}
else
{
arr[i] = temp[i];
}
}
return o;
}
其实第二个方法也一样的道理只不过实现起来代码不一样
public void remove(Object obj){}
第二个方法你就想通过一个对象然后查找到和这个对象相等的那个对象时把他返回并干掉就ok了
具体第二个代码我就不给楼主写了 不过提示一点楼主在对比对象的时候用==记得
作者:
陈淑飞
时间:
2012-6-30 23:15
public void remove(int index){
if (index>=size)
{
// 数组越界呢
}else if (index = size -1)
{
arr[index]=null;
size -- ;
}else{
System.arraycopy(arr,index+1,arr,index,size-index-1);
arr[--size] = null ;
}
}
public void remove(Object obj){
int index = -1;
for(int i=0;i<size;i++){
if(oby==arr[i])
{
index = i;
break;
}
}
if(index = -1){
// 找不着obj,没法移除呢
}else{
remove(index);
}
}
复制代码
remove(Object obj)
在remove obj时,其实它的思想是 先找到obj在这个数组中的位置,
找到位置后,给remove(int index)处理得了。
所以本质上,只要思考如何去实际
remove(int index) 这个方法就好了。
考虑这个方法是,要考虑到传入的index是否合理
为了方便处理 将 若移动是最后一位 元素就 简单了,直接置空 size-- 就可以了。
剩下的,用System.arraycopy 来搞定就可以了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2