Handling large numbers of input contacts
I would do this with scanning, in much the same way that a keyboard is scanned, and also similar to the way large memory is arranged internally in rows and columns. 

Your 1024 contacts can be arranged in a 32 row x 32 column array, and there are I2C  shift registers and I/O port extenders that can be used to help you scan a large array like this and read it from the Arduino