一、Set和List的区别
1)Set接口实例存储的是无序的,不重复的数据。List接口实例存储的是有序的,可以重复的元素。
2)Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变<实现类有HashSet,TreeSet>
3)List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,由于插入删除操作会引起其他元素位置改变,故而插入删除效率低<实现类有ArrayList,LinkedList,Vector>。
二、ArrayList和LinkedList的区别
1)ArrayList是List接口的一种实现,它是使用数组来实现的。
2)LinkedList是List接口的一种实现,它是使用链表来实现的。
3)ArrayList遍历和查找元素比较快。LinkedList遍历和查找元素比较慢。
4)ArrayList添加、删除元素比较慢。LinkedList添加、删除元素比较快。
三、数组、ArrayList、List三者区别
1) 数组
优点:在内存中时连续的,速度较快,操作简单。
缺点:定义数组时要定义其长度,不是很灵活,过长过短都会造成问题。不方便进行数据的添加、插入和移除。
例如:int [] i=new int[2];
i[0]=111;
i[1]=123;//赋值
i[1]=1234;//修改
2)集合ArrayList
优点:命名空间System.Collections下的一部分。大小是动态扩充与收缩的。在声明ArrayList对象时不需要指定它的长度。ArrayList继承了IList接口,可以很方便的进行数据的添加、插入和移除.
缺点:当向集合插入不同类型的数据后(ArrayList将数据当作object存储),在进行数据处理时容易出现类型不匹配的错误,使用时需要进行类型转换处理,存在装箱与拆箱操作,造成性能大量损耗的现象。
例如:ArrayList list = new ArrayList();
list.Add("aa");
list.Add(11);
list[1] = 123;//修改
移除list.Remove(123);
list.RemoveAt(0);
3)泛型List
优点:与集合ArrayList类似且继承IList接口,在声明List集合时也要声明集合内部数据的对象类型,避免了装箱和拆箱的问题。
例如:List list=new List();
list.Add(123);
list[0]=111;//修改
list.RemoveAt(0);//移除
如果list.Add(“abc”);//编译器就会报错,避免了类型安全问题与装箱拆箱的性能问题。