现在的位置: 首页 > 综合 > 正文

java基础—–集合!

2013年08月02日 ⁄ 综合 ⁄ 共 1223字 ⁄ 字号 评论关闭

1.何为集合?:

java中为了方便存储对象。就产生了集合。

所以集合只用于存储对象。集合的长度是可以变化的。也可以去存储不同的对象。这里要注意的是:

	List<Integer> list = new ArrayList<Integer>();

	list.add(3);

这里其实是java中自动进行了装箱操作。将int类型的3装箱成Integer类型的。在取出来的时候又自动拆箱。

2.集合分类:

 在java中一类集合直接存储对象,则是去实现Collection.

另一类集合根据映射关系实现Map接口,具有键值对关系。两类接口共同组成了JAVA中的集合。

3.Collection

Collection能让你去操作对象组,它是位于类集层次的最顶层。它根据是否允许元素的重复,分了两大类。Set集合和List集合。

   List 主要去处理序列(对象的列表),其中允许对象的重复。如ArrayList,LinkedList和 Vector是三个主要实现类。

   Set 主要去处理集合,集合必须包含唯一元素。

   其中还有一个比较重要,SortedSet 扩展了Set 集合去处理排序集合。
4.Map集合:

Map是一个存储关键字和值的关联或者说是键值对的对象。可以去通过一个关键字来得到它的值。关键字的值都是对象。

但是要注意的是:关键字(key)必须唯一,不能重复,但是值(value)可以重复。但是在HashTableHashMap中的值可以为null.而在HashMap则是不可以的。

5.集合的线程安全问题:

Vector和HashTable是线程同步(synchronized)。ArrayList 和 HashMap则是线程不同步的。

这样就导致了前者的安全性好,而效率不高。后者的效率高但是安全性不好。这样就要线程不要求安全的时候用后者,否则用前者。

6.equal()和hashCode()

关于hashCode只有hashSet,hashMap等才会用到。对于ArrayList等不会用到。

对于hashSet之类的集合,每个对象要放入到集合中,在这之前,会去先根据自身的属性,计算出一个hashCode值.当然这个hashCode方法是可以去选择重载的。

然后再去找到在内存中hashCode值相同的区域,调用equal()方法比较有没有相同的对象,如果没有就存入集合中,如果存在对象,就不存入集合。

这里要注意的就是只有当存在hashCode值相同的时候才会去调用equals 方法。否则是不调用的。

还有一点在注意:

当一个对象被存入hashSet中后,就不能修改这个对象的那些个参与计算机哈希值的字段了。否则,对象修改后的哈希值与最初存储进hashSet集合中的hashCode值不同了。

在这样的情况下,技术在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也找不到返回对象的结果。这就会导致会无法去HashSet集合中单独删除对象,从而造成内存泄露。

抱歉!评论已关闭.