[Gambas-user] Would an ArrayList datatype be helpful for gambas users?

Benoît Minisini benoit.minisini at gambas-basic.org
Sun Sep 10 19:55:15 CEST 2023


Le 10/09/2023 à 19:04, Martin Fischer a écrit :
> Hi all,
> 
> I was quite surprised that gambas does not provide a general-purpose
> list implementation (I know, there is data.List, but that is not general
> purpose I think...)
> So I created one:
> 
> --------------------------
> ### A list implementation backed by an array of Variant.
> 
> An ArrayList can keep up to MAX_INT entries.\
> It grows automatically if the initial capacity of the backing array is
> exceeded.\
> It will also shrink if you remove existing elements.
> 
> Iteration-order is defined as insertion-order (for the classical "For"
> loop as well as for the "For-Each" loop).\
> 
> Usually this implementation is space and time-efficient and cache-friendly:
> - Add, Clear, Slice, SliceOfSize: O(1)
> - GetAt, SetAt: O(1)
> - Contains, Remove, RemoveAt, AsArray: O(n)
> 
> Note that elements of this list can be accessed with the
> array-index-access operator ([]).
> 
> This class is Serializable.
> 
> Usage Example:
>      Dim list As ArrayList = New ArrayList(10) ' optional initial
> capacity: 10
> 
>      list.Add("e1") ' add some elements
>      list.Add("e2")
>      list.Add("e3")
>      list.AddAll("e4", "e5", "e6") ' add many elements explicitly
>      list.AddAllFromEnumerable(list2) ' add all elements from anything
> that can be traversed via For-Each loop, e.g an ArrayList or an array
> 
>      Dim specialElement = list[0] ' retrieve elements of list with
> array-index access
>      list[1] = "e2_new" ' existing list elements can be changed
> 
>      For Each elem As String In list ' classic "For" and "For In" loops
> are supported
>         process(elem)
>      Next
> 
>      Dim sublist As SlicedArrayList = list.Slice(2, 4) ' get a sublist
> as view of original list. No copying involved here
> 
>      list.Sort(gb.Descent) ' sort the list in-place
> 
> 
> What do you think?
> 
> 
> ____________________________________
> Martin Fischer
> 

I don't see the need of that as you can already use an array to do the 
same thing.

Or maybe I missed something?

-- 
Benoît Minisini.



More information about the User mailing list