集合一般的操作
插入: add
删除: remove
查找: contains,remove
java中的集合
注意哪些是接口,哪些是实现类
使用集合的时候
1. 有无序,可否重复
–Set:无序、不可重复的集合
–List:有序,可重复的集合
--双向链表(LinkedList):对get和set调用花费常数时间,对插入和删除代价昂贵
--动态数组(ArrayList): 对插入和删除开销小,对get花费昂贵(不容易做索引,但是可以通过索引访问)
–Map:具有映射关系的集合
插入一个元素:
add(0,ob) 表头插入,LinkedList时间是O(1),ArrayList时间是O(N)
add(ob) 表尾插入,LinkedList时间是O(1),ArrayList时间是O(1)
获取一个元素:
get(i) LinkedList时间是O(N)
ArrayList时间是O(1)
搜索一个元素:
两者都很低效。
Contains的contains和remove两个方法都需要花费线性时间。
ArrayList中有一个容量的概念。表示基础数组,可扩展。 trimToSize方法可以在所有ArrayList添加完成之后使用避免浪费空间;
"Collection”和“Collections”是两个不同的概念。,”Collection”是集合层次的顶层接口,而”Collections”是提供了操作集合类型的静态方法的类。
当我们操作集合的时候,如果觉得需要什么方法,都可以到Collections 类中来找
C#中的集合
C#中:
凡是接口都是I开头的,所以List在java中是接口,而在C#中是类。
List类型是可以使用索引的。只不过它在定义的时候是不指定大小的。
所有集合相关类型都必须要实现一个接口,那就是IEnumerable,这也就是为什么不管是数组、还是集合、还是字典,都支持foreach操作的原因。
所有集合接口的祖宗是IEnumerable,有点同java中的Iterator