As stated in the title, what is major difference between GLib.Array and GLib.List in Vala language? They look very similar in the tutorial pages.
CodePudding user response:
GLib.Array
is an array. GLib.List
is a (doubly linked) list. Here is an article comparing (singly linked) lists and arrays: https://www.geeksforgeeks.org/linked-list-vs-array/
It's also worth mentioning that with GLib.List
(and GLib.SList
), the pointer actually points to the head of the list. That means that if you're storing a reference to the list in one place and modifying the list somewhere else you'll likely end up with some memory management problems. Unless you understand what's going on under the hood you're probably much better off using Gee.List
(or one of the other data structures in libgee).
In Vala you'll generally want to use GLib.GenericArray
instead of GLib.Array
, unless you're interfacing with something which requires a GLib.Array
. GLib.Array
just doesn't work quite as well with how generics work in Vala; GArray
is actually a bit weird in C as well, and just doesn't translate very well to Vala. GLib.GenericArray
is an alternate binding for GLib.PtrArray
(which is a GPtrArray
at the C level, not a GArray
).