2013-08-07 28 views
1

我有一个ArrayList,它存储对象Foo当ArrayList频繁更改时访问特定的ArrayList元素

比方说,我要添加对象Foo的10至ArrayList,我会做类似如下:

for (int i = 0; i <10 ; i++){ 
    arraylist.add(new Foo()); 
} 

虽然这种解决方案的工作,问题是,我该如何访问,说第九Foo,第三名和第四名Foo从阵列列表中被删除后?

我不能简单地做

arraylist.get(9); 

了,因为这会丢IndexOutOfBoundsException

我希望能够使程序动态地做到这一点,因为在我的情况下,Foos的数量不是固定的,并且可以随时删除它们。

+0

@Reimeus有没有办法动态地做到这一点?因为在我的程序中,Foos的数量不是固定的。 – user2519193

+0

@ user2519193:完全取决于你想要做什么。如果你只想要最后一个,那很简单。如果你想让某个索引忽略删除,你应该设置为null而不是删除。 – SLaks

回答

2

你需要有特定的顺序的项目,你可能不会永远记住这富插入该指数为这是一个Map<Integer, Foo> is perfect.

Map<Integer,Foo> map = new HashMap<Integer, Foo>(); 
map.put(1, new Foo()); 
map.put(2, new Foo()); 
etc 

%的意见,map = TreeMap<Integer, Foo>()可能会更好。

+0

HashMap不保留广告订单。 TreeMap更好。 – CPerkins

+0

谢谢,符合我的需求,我不应该使用ArrayList动态地执行任务。 对于其他人,抱歉!我误解了我的问题,所以大家仍然在技术上正确回答! – user2519193

+0

是的,这是真正的CPerkins,但是如果你遍历键集,你会按顺序得到它们,尽管不是最优的。 – arynaq

0
arraylist.get(8 - numberOFDeletedElements); 

8不是9,因为索引中,开始时0和9号元素开始(在删除之前)具有指数8

arraylist.get(arraylist.size() - 2); 

你可能不需要这个的。由于所有对象都是相同的。如果它们是不同的,那么你可能需要遍历数组,并检查要找到一个元素

+0

如果他在要访问的元素之后删除元素,则不起作用。 – SLaks

0

Foo创建一个equalTo()方法比使用ArrayList 方法的条件。

+0

你的意思是'equals()'? – Joe

1

如果你只关心最后一个元素,你可以永远只是做

arraylist.get(arraylist.size() - 1)