Well as far as I know ArrayList won't just do this behind your back.  I
would assume there is something else your app is doing that isn't shown
here.  Are you sure you never change what is in mPeople that could cause a
new instance of an object to be created?

On Sat, Nov 5, 2011 at 10:16 PM, Jay <[email protected]> wrote:

> Thank you for the reply. Is there some other mechanism by which the
> objects in my array might be replaced with objects with the same type
> and contents but different identities (i.e. don't compare as equal
> using the default implementation)? Because that seems to be what is
> happening (intermittantly).
>
> Thanks,
> Jay
>
> On Nov 6, 12:00 am, Dianne Hackborn <[email protected]> wrote:
> > None of the methods you are using will copy an object.  Generally you
> must
> > explicitly call clone() to do this.
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > On Sat, Nov 5, 2011 at 6:25 AM, Jay <[email protected]> wrote:
> > > I assume this is an Android question, though it may just betray my
> > > ignorance of Java memory management.
> >
> > > I have an activity designed to randomly pick a person from a list, and
> > > to not repeat anyone until everyone has been chosen. The core logic of
> > > the pick method looks like this:
> >
> > >        ArrayList<Person> peopleCopy = new ArrayList<Person>(mPeople);
> > >        peopleCopy.removeAll(mRecent);
> > >        Person person = peopleCopy.get(mRNG.nextInt(peopleCopy.size()));
> > >        mRecent.add(person);
> > >        // Display chosen person in UI
> >
> > > Both mPeople and mRecent are referenced by adapters that feed into
> > > ListViews.
> >
> > > The bug I was finding is that the same person was being chosen more
> > > than once in a cycle, despite the code above. I had a hell of a time
> > > tracking it down; I couldn't duplicate it on the emulator or on the
> > > actual device when connected to the debugger. I finally managed to
> > > "catch" the bug in progrss on the device and plug it in to the
> > > debugger. Based on the object id fields, it appears that the problem
> > > is that the Person objects referenced my mRecent were different from
> > > the ones in peopleCopy, which is why the removeAll method was not
> > > subtracting them correctly. I implemented appropriate equals() and
> > > hashcode() methods on Person and that seems to have fixed the problem.
> >
> > > My question is where/when/why were the Persons in mRecent and/or
> > > mPeople being replaced with clones? It wasn't happening all the time;
> > > based on observations with the debugger, it appears that usually the
> > > lists referenced the same objects as I expected them to. Does the
> > > framework sometimes clone objects referenced by adapters or does Java
> > > or am I misreading this whole situation?
> >
> > > Thanks,
> > > Jay
> >
> > > --
> > > You received this message because you are subscribed to the Google
> > > Groups "Android Developers" group.
> > > To post to this group, send email to
> [email protected]
> > > To unsubscribe from this group, send email to
> > > [email protected]
> > > For more options, visit this group at
> > >http://groups.google.com/group/android-developers?hl=en
> >
> > --
> > Dianne Hackborn
> > Android framework engineer
> > [email protected]
> >
> > Note: please don't send private questions to me, as I don't have time to
> > provide private support, and so won't reply to such e-mails.  All such
> > questions should be posted on public forums, where I and others can see
> and
> > answer them.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>



-- 
Dianne Hackborn
Android framework engineer
[email protected]

Note: please don't send private questions to me, as I don't have time to
provide private support, and so won't reply to such e-mails.  All such
questions should be posted on public forums, where I and others can see and
answer them.

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to