黑马程序员——集合框架

来源:互联网 发布:开淘宝店的流程和步骤 编辑:程序博客网 时间:2024/05/09 14:55

                               -----------android培训java培训、java学习型技术博客、期待与您交流! ------------

一、介绍集合框架的结构

1.1  Collection 与 Collections

Collection是集合类的上级接口,继承他的主要有List、Set。

Collections 是是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

2.1 List 与 Set

List:元素是有序的,元素可以重复,因为该集合体系有索引。

Set:元素是无序的,元素可以不重复,该集合没有索引。

List集合有特有的迭代器:ListIterator. 它是Iterator的子接口。

因为Iterator方法是有限的,只能对元素进行判断、取出、删除的操作。如果想要其他的操作如:添加、修改等就需要用其子接口,ListIterator.该接口只能通过List集合的ListIterator来获取。

3.1 ArrayList 、LinkedList 与Vector

首先,ArrayList、LinkedList、Vector都实现了List接口。(List接口继承了Collection接口)
区别:
1.版本:
Vector集合是在JDK1.0的时候出现的。     ArrayList、LinkedList集合是在JDK1.2的时候出现的。
2.数据结构:LinkedList底层用的是链表结构。        ArrayList、Vector:底层用的是数组数据结构。
3.线程方面:LinkedList线程不同步。   ArrayList是线程不安全的,它的方法之间是线程不同步的。。   Vector是线程安全的,他的方法之间线程是同步的。
4.存储特点:ArrayList与Vector都有一个初始容量,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间。 ArrayList每次增长为原来的0.5倍。Vector每次增长为原来的一倍。
5.操作效率:ArrayList:查询速度快,但是增删稍慢。    LinkedList:增删速度快,查询比较慢。   Vector:增删查都慢。
            一般建议不使用Vector.尽量使用ArrayList.如果需要线程同步,就把ArrayList加上一个同步锁即可。

LinkedList特有方法:

在JDK1.6出现了替代方法。

OfferFirst();   OfferLast();   //获取元素,但不删出元素,如果集合中没有元素,会返回NULL

PeekFirst();   PeekLast();  //删除元素,如果集合中没有元素,会返回NULL。

3.2 HashSet、TreeSet

HashSet:底层数据结构是哈希表。

HashSet保证元素的唯一性。 通过元素的两个方法,hashCode和equals方法。

如果元素的HashCode值相同,才会判断equals是否为true.

如果元素的HashCode值不相同不会调用equals。

TreeSet:底层数据结构是二叉树。

保证元素唯一性的依据是compareTo方法 return 0;

TreeSet排序的第一中方式:让元素自身具有比较性。元素需要实现Comparable接口,覆盖compareTo方法。这种方式称为元素的自然排序,或者叫做默认排序。

TreeSet排序的第二种方式:当元素不具备比较性时,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。在集合初始化时就有了比较方式。

当两种排序都存在时,以比较器为主。

4.1 Map

首先,HashTable、HashMap、TreeMap都实现了Map接口

HashTable:底层数据结构是哈希表。不可以存入null值和null键,该集合是线程同步的。

HashMap:底层数据结构是哈希表。允许使用null值和null键,该集合不同步。

TreeMap:底层数据结构是二叉树。线程不同步。可以用于给集合中的键进行排序。

Map集合的两种取出方式:

1.keySet:将Map中所有的键存入到Set集合中。因为Set具备迭代器,可以用迭代方式取出所有的键,在根据get方法,获取每一个键对应的值。

Map集合取值原理:将Map集合转换成Set集合,在通过迭代器取出。

2.Set<Map.Entry<K,V>> entrySet:将Map集合中的映射关系存入到Set集合中,而这个类的数据类型就是:Map.Entry

Map.Entry其实Entry也是一个接口,它是Map接口中的一个内部接口。

5.1 Arrays

Arrays:用于操作数组的工具类,里面都是静态方法。

把数组变成集合有什么好处?

可以用集合的思想和方法来操作数组中的元素。

注意:将数组中的元素变成集合,不可以使集合的增删方法,因为数组的长度是固定的。

如果数组中的元素都是对象,那么变成集合时,数组中的元素就直接转换成集合的元素。

如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。

 

----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------

详情请查看:http://edu.csdn.net/heima

 

 

 

 

原创粉丝点击