Can you acomplish the same thing with arrays for example an array containing both ints and strings?
Yes, actually you can. The reason ArrayList works with multiple types is that it technically holds type object, which is your highest level base class. You can create an array of object (ie. object foo;) for the same effect.
However, note that you'll experience the same problem as ArrayList. There's no static type checking, you must take care to cast appropriately on retrieval, and you can suffer the performance hit of boxing/unboxing. The generic List<> was introduced largely to correct those issues.