您的位置:首页 > 编程语言 > Java开发

Java集合框架 List和Set

2015-10-11 16:13 411 查看
LinkedList(链表集合):LinkedList类扩展AbstractSequentialList并实现List接口。它提供了一个链表的数据结构。

LinkedList的特点:因为LinkedList是使用双向链表,所以针对频繁的添加和删除元素,使用LinkedList类效率更高。它的使用适合实现栈(数据结构)和队列(数据结构),当需要在集合中间位置频繁添加和删除元素时,建议使用LinkedList类。

集合工具类(Collections)

数组工具类(Arrays)

迭代器(Iterator)接口是一种用于遍历集合。所谓遍历,是指从集合中取出每个元素的过程。

Iterator方法:

1>boolean hasNext():判断游标右边是否有元素

2>Object next():返回游标右边的元素并将游标移动到下一个位置

3>void remove():删除游标左边的元素

Vector(向量表集合):Vector类扩展AbstractSequentialList并实现List接口,它与Arraylist的用法几乎完全相同,二者之间最大的区别在于Vector类是线程安全的(线程同步),所以性能要稍低于ArrayList类。该实现类已经过时,实际应用开发时不建议使用。

Stack(栈集合):Stack类货站Vector类,它提供了一个栈的数据结构。数据结构中的栈,在解决很多问题都是有用的(比如括号匹配、迷宫求解、表达式求值等)。该实现类已经过时,实际应用开发时不建议使用。

Set接口:它继承与Collection接口,是一个不允许存在重复元素的有序集合。Set接口添加、查找和删除元素都有很高的效率。Set接口的实现类(具体类)常用的有HashSet(哈希集合)、LinkedHashSet(链表哈希集合)

和TreeSet(有序树集合)。

HashSet(哈希集合):HashSet类是Set接口实现类之一,使用较为广泛,它不保存元素的加入顺序。HashSet类根据元素的哈希码进行存放,所以取出时也可以根据哈希码快速找到。

注意:因为Set接口中不能加入重复的元素,使用对于自定义类,需要提供判断重复元素的方法,即需要重写hashCode()和equals()两个方法。

hashCode()方法:如果一个集合中有100个元素,再添加一个新元素时,需要执行100次equals()方法,如果每增加一个元素就遍历一次集合,那么当元素数量很多时,后添加到集合中的元素的比较次数就会越来越大。这样显然会大大降低程序效率,于是java采用了哈希表(属于数据结构)的原理,使用哈希算法(也称为散列算法)将元素直接指定到一个地址上。我们可以将hashCode()方法的返回值看作是对象存储的物理地址的一个索引。添加新元素时,先通过索引查看这个位置是否存在元素,如果不存在,则可以直接将元素存储于此,不需要在调用equals()方法;如果已经存在元素,则再调用equals()方法与新元素进行比较,相同则不存放,不同就再索引其他地址存放。这样就使实际equals()方法的次数大大降低,提高了程序运算效率。

equals()方法和hashCode()方法的说明:

1>如果两个对象相同,那么他们的hashCode(哈希码)一定要相同;

2>如果两个对象的hashCode(哈希码)相同,这两个对象并不一定相同。

*****

注意事项:java规范中要求,如果程序员重写了equals()方法,就一定要重写hashCode()方法。当两个对象调用equals()方法比较时,如果返回true,那么他们的hashCode值也要求返回相等的值。

LinkedHashSet(链表哈希集合):它的使用和HashSet几乎相同,并使用链表记录元素的加入顺序。

TreeSet(有序树集合):TreeSet类使用红黑树(属于数据结构)对加入的元素进行排序存放,如果加入TreeSet类中的元素时自定义的,则需要实现比较器Comparable接口并重写compareTo方法,用于元素之间的排序比较。

整型包装类:按数字大小排序

Character类(字符类):按Unicode值的数字大小排序

String类(字符串类):按字符串中的字符的Unicode值大小排序

Map接口:它不是继承于Collection接口,用于维护键值对。Map中的键值可以使任意类的实例化对象。在Map中不允许出现重复键,所以存入Map中的键对应的类重写hashCode()方法和equals()方法,Map接口的实现类(具体类)常用的有HashMap、TreeMap和Properties。

HashMap(哈希映射集合):HashMap类是基于哈希表的Map接口实现,提供所有可选的映射操作,效率高,所以在实际应用开发中使用很广泛。由于HashMap的键要求不重复,所以建议尽量使用标准库类。避免自定义类重写hashCode()方法和equals()方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: