我随便说说吧,我不是计算机专业的,c语言看过点,数据结构压根没看,这是我的理解,既然是用到了集合,首先你要确定你往集合里面添加元素时,是希望元素在集合里面是有序排列还是无序排列,这个顺序是你往集合里面扔元素的顺序,如果你想有序排列的话就要考虑使用实现了list接口的对象,主要的两个是ArrayList和LinkedList,前者是利用数组数据结构存放数据,该数据结构的好处是拿到数据比较快,数据存放在内存中是一条一条的,你想拿到第几个元素,可以用元素的下标值乘以元素的字节数直接定位过去,读取数据相当快,相反,删除数据就比较慢了,删除指定下标的数据后,还要把后面的元素每一个都要向前移一个元素的字节数。如果是使用LinkedList这个链表集合,和ArrayList相反是典型的改快读慢,因为他在内存中存储数据不是连续的,每一个元素中不止保留了该元素,还有下一个元素的地址,第一个元素指向第二个元素,第二个元素指向第三个元素。。。。。。 你想拿到指定下标的元素,没办法像ArrayList直接定位,因为不知道他的地址,例如你如果想拿到第三个元素,只能先找到第一个元素,然后利用第一个元素中的指针找到第二个元素,之后再找第三个元素,够麻烦吧,删除数据就比较快了,想删除第三个元素直接将第二个元素本来指向第三个元素的指针指向第四个元素就可以了,这样原来的第三个元素对象失去引用就成垃圾对象了,看具体的业务逻辑吧,读取数据多的时候就使用ArrayList,删除多的话就使用LinkedList,接下来是实现了
Set的集合了,主要有TreeSet和HashSet,他们都是无序排列,且元素不准重复的,TreeSet底层是用红黑树数据结构说是无序其实是按特定的顺序(从小到大或从大到小)排列的,类似于二分查找,效率相对于传统的方法要高效太多了,hash表没有研究过,这里就不加描述了 |