事物的出现都有其必然原因,在我第一次接触新知识的时候,我都会去思考其中的原因,尽管,不是每次都能很好的说服自己,就像,在数组的基础上,第一次接触集合(只指在编程中),我就会去不自觉的比较集合和集合。
集合与数组的比较:
数组 :长度一旦固定之后就不能改变, 数组存储的元素(可以是基本数据类型,也可以是对象)类型得是一样的;
集合: 长度可变,集合中的元素(都是对象)类型可以不一样,但是,在泛型集合中,会建议集合中元素类型一致。
集合和数组的区别,给我的直观感觉就是这样的,但是本质上都是一个容器,都是存放元素的。(个人不成熟的认识)
既然集合是存放元素的,那么按照正常人的思维,会正常思考,这里面的元素是不是可以重复啊,是不是按存放的先后顺序进行编号呢,是不是会按元素大小来排序编号呢。。。
在Java集合(java.util包中)中大致分为:
Set:代表无序,不可重复的集合(代表:HashSet) -----------------> 在Set集合中元素不可以重复,也没有顺序,而且是乱的
List:代表有序,重复的集合(代表:ArrayList) -----------------> 在List集合中元素可重复,按大小编号(既然比较元素值,肯定会提供比较的方法),是有序的
Map:代表具有映射关系的集合(代表:HashMap) -----------------> (还没有学习。。。)“一个萝卜,一个坑”
Queue:代表队列集合
搞清分类,来看看集合之间的继承关系(不准确的说法)
Set、List、Queue都是实现Collection接口,这就意味着,Collection中定义的方法,在Set、List、Queue中都有。
具体参见API文档.
(此处,实例代码暂时省略...)
- 注意:当使用foreach循环迭代访问集合元素时,该集合也不能被改变。
- 注意:Set判断两个对象相同不是使用==运算符,而是根据equals方法。
- 注意:HashSet集合判断两个元素相等的标准:是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值也相等。
总结:
ArrayList 和Vector类都是基于数组实现的List类,所有它们封装了一个动态再分配的Object[]数组。
ArrayList和Vector的显著区别:
ArrayList是线程不安全的,在多线程的情况下,必须手动保证该集合的同步性
Vector是线程安全的,无需程序保证该集合的同步性,但因此性能也会比ArrayList稍微低点
实际上,即使需要保证List集合线程安全,也不推荐使用Vector,因为后期会有Collections工具类将一个ArrayList变成线程安全的。
(还没有太多心得,估计是练习少了,权且记录点上课内容,如果之后有格外的体会,会重写的)