ArrayList vs Listobject
You'll be able to use the LINQ extension methods directly with List<object>
, but not with ArrayList
, unless you inject a Cast<object>()
/ OfType<object>
(thanks to IEnumerable<object>
vs IEnumerable
). That's worth quite a bit, even if you don't need type safety etc.
The speed will be about the same; structs will still be boxed, etc - so there isn't much else to tell them apart. Except that I tend to see ArrayList
as "oops, somebody is writing legacy code again..." ;-p
ArrayList vs List in C#
Yes, pretty much. List<T>
is a generic class. It supports storing values of a specific type without casting to or from object
(which would have incurred boxing/unboxing overhead when T
is a value type in the ArrayList
case). ArrayList
simply stores object
references. As a generic collection, List<T>
implements the generic IEnumerable<T>
interface and can be used easily in LINQ (without requiring any Cast
or OfType
call).
ArrayList
belongs to the days that C# didn't have generics. It's deprecated in favor of List<T>
. You shouldn't use ArrayList
in new code that targets .NET >= 2.0 unless you have to interface with an old API that uses it.
Is ListObject a good replacement for ArrayList?
As @HighCore mentioned in his comment, you should use the generic form of List, List<T>
. If you have several classes defined that you need to include in that List, they probably have common properties, methods. In that case, you can make an abstract
class for the group of classes.
List<Object>
is a possible replacement, but not a good one.
ListObject listObject = new ArrayListObject()?
This is because of the fact that its always a good practice to write code to interface and not implementation. So when you do List<Object> listObject = new ArrayList<Object>();
you always have the liberty to change ArrayList to LinkedList and elsewhere in the code will need no change. So programming to interface (List) here gives you the liberty/power to change the underlying implementation without affecting other places in code. I will suggest you to read this small note to have more clarity.
Type List vs type ArrayList in Java
Almost always List
is preferred over ArrayList
because, for instance, List
can be translated into a LinkedList
without affecting the rest of the codebase.
If one used ArrayList
instead of List
, it's hard to change the ArrayList
implementation into a LinkedList
one because ArrayList
specific methods have been used in the codebase that would also require restructuring.
You can read about the List
implementations here.
You may start with an ArrayList
, but soon after discover that another implementation is the more appropriate choice.
Polymorphism: Why use List list = new ArrayList instead of ArrayList list = new ArrayList?
The main reason you'd do this is to decouple your code from a specific implementation of the interface. When you write your code like this:
List list = new ArrayList();
the rest of your code only knows that data is of type List
, which is preferable because it allows you to switch between different implementations of the List
interface with ease.
For instance, say you were writing a fairly large 3rd party library, and say that you decided to implement the core of your library with a LinkedList
. If your library relies heavily on accessing elements in these lists, then eventually you'll find that you've made a poor design decision; you'll realize that you should have used an ArrayList
(which gives O(1) access time) instead of a LinkedList
(which gives O(n) access time). Assuming you have been programming to an interface, making such a change is easy. You would simply change the instance of List
from,
List list = new LinkedList();
to
List list = new ArrayList();
and you know that this will work because you have written your code to follow the contract provided by the List
interface.
On the other hand, if you had implemented the core of your library using LinkedList list = new LinkedList()
, making such a change wouldn't be as easy, as there is no guarantee that the rest of your code doesn't make use of methods specific to the LinkedList
class.
All in all, the choice is simply a matter of design... but this kind of design is very important (especially when working on large projects), as it will allow you to make implementation-specific changes later without breaking existing code.
.NET: ArrayList vs List
ArrayLists are essentially deprecated as they're untyped - you need to use casts with them - and they're slower and less space efficient for value types because they require the items to be boxed.
Generic lists were introduced with .Net 2.0 and are the way to go. Often a List is better than an array, with few downsides.
As these collections are part of the .Net Base Class Library, this advice also applies to C# and to any .Net language which supports generics - it's not specific to VB.NET.
Difference between ArrayList and Array of object
The short answer is arrays have a set size you define where as an arraylist has infinite size. You'll learn a lot about them from the api
https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html
https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
Related Topics
Practical Applications of Bitwise Operations
How to Implement Gzip Compression in ASP.NET
.Net - Convert Generic Collection to Datatable
Putting HTML Inside HTML.Actionlink(), Plus No Link Text
How to Find All the Classes Which Implement a Given Interface
Expression.Lambda and Query Generation at Runtime, Simplest "Where" Example
ASP.NET Webapi: How to Perform a Multipart Post with File Upload Using Webapi Httpclient
Sending Outlook Meeting Requests Without Outlook
Why Would I Bother to Use Task.Configureawait(Continueoncapturedcontext: False);
How to Get the Taskbar's Position and Size
How to Make JSON.Net Serializer to Call Tostring() When Serializing a Particular Type
Linq Where Ignore Accentuation and Case
Specifying Generic Collection Type Param at Runtime