I\'ve currently got a spreadsheet type program that keeps its data in an ArrayList of HashMaps. You\'ll no doubt be shocked when I tell you that this hasn\'t proven ideal.
Some columns will have a lot of repeated values
immediately suggests to me the possible use of the FlyWeight pattern, regardless of the solution you choose for your collections.