java集合类

来源:互联网 发布:vulcan软件 编辑:程序博客网 时间:2024/05/29 13:38

java集合类大致上可分为Set、List、Map,自JDK1.5之后增加了Queue体系集合,而且增加了泛型,java集合可以记住容器中对象的数据类型,从而可以编写更简洁、健壮的代码。

集合和数组的区别:

数组是固定长度的,分配固定大小的内存;而集合是不定长的。

数组中的元素类型可以是基本类型,也可以是对象;而集合里只能保存对象的引用。

java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是java集合框架的根接口,这些接口又包含了一些子接口和实现类。

Set集合:无序,所以元素不可重复。不然系统就无法准确识别这个元素。

List集合:有序,元素可重复,根据插入顺序的索引来访问数据。

Map:基于key-value的存储和访问,所以key值不可重复。

Iterator迭代器必须依附于Collection对象,当使用Iterator来迭代访问Collection集合元素时,Collection集合中的元素不能被修改,只能通过Iterator的remove方法来删除上一次next方法返回的集合元素才可以。


Set集合:Set集合不允许包含相同的元素,如果把两个相同的元素加入同一个Set集合中,则添加操作失败,add()返回false,且新元素不会被加入。判断两个元素是否相同使用的是equals()方法。

HashSet:

不能保证元素的排列顺序,顺序有可能发生变化;

HashSet不是同步的,如果有多个线程同时访问了一个Set集合并对其进行修改,必须通过代码保证其同步;

集合元素可以是null;

当向HashSet集合中存入一个元素时,HashSet会调用该对象的HashCode()方法来得到HashCode值,来决定该对象在HashSet中的存储位置。访问HashSet集合中的某个元素,也是通过调用该元素的HashCode()方法返回的HashCode值来访问该存储位置,所以该元素的HashCode值相当于该元素的索引。

HashSet判断两个元素相等的标准是两个对象通过equals()方法比较相等,并且两个对象的HashCode()方法返回值也相等。

如果两个对象通过equals()方法比较返回为true,但HashCode()返回值不同,HashSet集合会将两个元素存储在不同位置,两个对象都可以添加成功。

如果两个对象的hashCode()方法返回的HashCode()相同,但通过equals()方法比较返回false,则会在同一个存储位置里放置多个元素,导致处理性能下降。

所以自定义对象时,当两个对象通过equals()方法比较返回为true时,这两个对象HashCode应该相等。不然可能导致HashSet不能准确访问该元素。

TreeSet:

不是根据元素的插入顺序进行排序的,而是根据元素的实际值进行排序的,所以集合元素必须实现comparable接口,才能正常添加、访问。

不相等的标准:两个对象通过equals()方法比较返回fasle,并通过compareTo比较没有返回0,。 返回0则相等,返回1则obj1>obj2,返回-1则obj1<obj2;

List:

List集合代表一个有序集合,集合中的每个元素都有其对应的顺序索引。List集合判断两个对象相等只要通过equals()方法比较返回true即可。

List提供了一个listIterator()方法,返回一个ListIterator对象,增加了向前迭代和添加元素的功能。 hasPrevious()、previous()、add()方法。

ArrayList是线程不安全的,Vector是线程安全的。

HashMap是线程不安全的,HashTable是线程安全的。

HashMap可以使用null作为key或者value, 但是最多一项key为null,可以有无数项value为null; hashTable不允许使用null作为key和value.

如果不实际去用的话,看着都头晕。。。。


0 0
原创粉丝点击