您好我需要手动实现arraylist.add()
方法,只使用数组和数组复制方法,但我很难做到这一点。该方法的规范是该方法在指定位置插入一个元素,并将当前位置中的任何元素向右移动,并将一个元素添加到索引,将数组的大小扩展一个,以便所有元素都适合。有人请帮忙。
private Object [] list;
final int maxObjects = 100;
public ListOfObjects()
{
list= new Object[maxObjects];
}
public ListOfObjects(Object[]o)
{
list= o;
}
public void add(Object element,int index)
{
Object[] newData = new Object[list.length+1];
for(int i =0; i < index; i++)
{
newData[i] = list[i];
newData[list] = element;
}
for(int i = index; i < list.length; i++)
{
newData[i+1] = list[i];
}
}
答案 0 :(得分:0)
你的逻辑看起来对我不对。你应该做类似的事情 -
Object[] newData = new Object[list.length+1];
for(int i =0; i < index; i++)
{
newData[i] = list[i];
}
newData[index] = element;
for(int i = index; i < list.length; i++)
{
newData[i+1] = list[i];
}
答案 1 :(得分:0)
将元素添加到Object数组的索引
Object[] myObjects;
public static void addObject(Object obj, int index) {
// Assuming you want something in your empty array
if(myObjects == null) {
myObjects = new Object[] { obj };
return;
}
ArrayList<Object> temp = new ArrayList<Object>();
for(int i = 0; i < myObjects.length; i++) {
if(i == index)
temp.add(obj);
temp.add(myObjects[i]);
}
myObjects = temp.toArray(new Object[temp.size()]);
}
答案 2 :(得分:0)
System.arrayCopy的javadoc专门讲述了src和dest是同一个数组的情况:
如果src和dest参数引用相同的数组对象,那么 执行复制就好像位于srcPos的位置处的组件一样 首先将srcPos + length-1复制到具有length的临时数组 组件然后复制临时数组的内容 到目的地的destPos + length-1的destPos位置 阵列。
如果您的支持list
足够大,那么您只需使用arrayCopy将受影响的索引移到1上。
//shift everything after the index over
System.arrayCopy(list, index, list, index + 1, list.length - index);
//place new value in index
list[index] = element;
否则,您需要创建一个新数组,然后使用arrayCopy在插入索引之前复制所有内容。
Object[] newList = new Object[calcSize()];
//first copy everything before index if index is not 0
if (index > 0)
{
System.arrayCopy(list, 0, newList, 0, index);
}
newList[index] = element;
System.arrayCopy(list, index, newList, index+1, list.length - index);
答案 3 :(得分:0)
此解决方案利用了ArrayList迭代器,它以正确的顺序返回对象:
ArrayList<Object> elementInserter(ArrayList<Object> inArray, Object element, int index){
ArrayList<Object> outArray = new ArrayList<Object>(inArray.size() + 1);
outArray.addAll(inArray.subList(0, index));
outArray.add(element);
outArray.addAll(inArray.subList(index, inArray.size()));
return outArray;
}