Colletion与List和Set的区别及关系

首先,要明白,List 接口Set接口  是Collection 接口子接口.

List接口

List是有序的Collection,次序是List最重要的特点:它保证维护元素特定的顺序。使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和下面要提到的Set不同,List允许有相同的元素。
   除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。
  实现List接口的常用类有LinkedList,ArrayList,Vector和Stack(继承了Vector类,下面没有算进List接口实现类)。其中,最常用的是LinkedList和 ArrayList两个。

List接口,被实现了3个类.

第一个是Vector ,由于是JDK 版本1.0 就出现了,所以命名和之后的2个类有区别.

第二个 是 ArrayList类.

第三个是 LinkedList 类.

下面来谈谈这三个类的具体区别:

 Vector类ArrayList类底层都是利用数组实现的,区别在于 Vector是线程安全的,ArrayList是线程不安全的.也因此,Vector相对执行速度慢一点,ArrayList执行速度相对快一点.

ArrayList类 LinkedList类,前面说了,ArrayList是数组实现的,线程不安全,而Linkedlist 底层是由链表实现的,线程也不安全.(这2个类是实际开发中比较常用的)

Set接口

Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有几个不同的List。实际上Set就是 Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为)。其次,Set是一种不包含重复的元素的Collection,加入Set的元素必须定义equals()方法以确保对象的唯一性( 即任意的两个元素e1和e2都有e1.equals(e2)=false),与List不同的是,Set接口不保证维护元素的次序。最后,Set最多有一个null元素。
  很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。
  请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。

Set接口被实现了2个类.

第一个是 HashSet 类 , 它存储的数据是没有顺序的,迭代器迭代打印时,不会按照插入顺序显示.LinkedHashSet 继承HashSet类, 它和其父类的区别就在于 既具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序).于是在使用迭代器遍历时,结果会按元素插入的次序显示.

第二个是 TreeSet 类 ,它存储的数据是有次序的(即插入的次序),使用它可以从Set提取有序的序列.


小总结:(Map会在之后介绍,勿急)

Collection是对象集合,Collection有两个子接口List和Set

List可以通过下标(1,2..)来取得值,值可以重复

而Set只能通过游标来取值,并且值是不能重复的

ArrayList,Vector,LinkedList是List的实现类

ArrayList是线程不安全的,Vector是线程安全的,这两个类底层都是由数组实现的

LinkedList是线程不安全的,底层是由链表实现的  





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值