本章的主要内容有:

数组存在两个缺陷: 1. 数组的长度难以扩充 。 2. 数组中的元素类型必须相同。
容器可以弥补数组的两个缺陷,它是 Java API 所提供的一系列类的实例,用于在程序中存放对象。
需要记住下图:

集合就是将若干用途,性质相同或者相近的“数据”组合而成的一个整体。
在数学上,集合可以归纳为三种类型:
集(Set)
Set集合中不区分元素的顺序,不允许出现重复的元素。
列表(List)
List集合区分元素的顺序,且允许包含重复的元素。
映射(Map)
映射中保存成对的“键-值” (Key-value)信息,映射中不能包含重复的键,每个键最多只能映射一 个值。

Collection 接口中所定义的方法介绍 (只简单的列出来一些,其他的还需要看API文档)
int size( ) 返回此collection中的元素。
boolean isEmpty( ); 判断是否为空。
boolean containesAll (Collection c);
判断形参c所指向的集合中所有的元素是不是已经全部包含(是否equals)在了当前的集合中。
Object[ ] toArray ( )
容器不是数组,不能通过下标的方式访问容器的元素。
只有数组才可以通过下标来访问。
返回一个包含此collection中所有元素的数组。
boolean add(Object e) ; 把e添加到当前的集合中。
boolean remove ( Object o);
boolean addAll (Collection c); 把c中的所有元素添加到当前的集合中。
boolean removeAll ( Collection c);
void clear( ); 把当前容器中所有元素都清除。
booean equals (Object o);
int hashCode( );
toString方法
对于任意类A,假设aa是该类的一个实例
System.out.println(aa); 等价于 System.out.println(aa.toString())
Object类中含有toString()方法。
Java中所有的默认类都继承了Object的toString()方法
建议所有的子类都重写toString 方法。
equals()方法和hashCode()方法。
一般来说 当某个对象放在Map接口中作为字典那个索引(key值)时需要重写hashcCode()方法
重写equals() 方法,需要重写hashCode()方法 (也就是当这个类的对象,被当做键值【key值】时)



下边图片上的代码就是重写了equals()和hashCode(), 直接写return true 或者
return false 效果是一样的。 注意关键字 instanceof

iterator接口
iterator接口用来以统一的方式对集合中的各个元素进行遍历。
iterator接口的对象称作迭代器,利用该对象可以方便的遍历容器中的元素。
所有实现了Collection接口的容器类都有一个iterator() 方法,该方法返回一个实现 iterator接口对象。

void remove() 删除最近返回的元素,在调用remove之前,我们至少保证先调用一次next方法(否则会抛出异常),而且调用next之后只能调用一次remove方法。
Iterator对象的remove方法是在迭代过程中删除元素的唯一的安全方法。
补充: JDK1.5增强的for循环。
增强的for循环对于遍历array或collection的时候非常简便。

缺陷:
数组: 对于数组来说不能方便的访问下标值。
集合: 与使用Iterator相比,不能方便的删除集合中的内容。
在内部也是调用的iterator.
总结:除了简单遍历并读出其中的内容外,不建议使用增强for.
List接口:
List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且可以重复。
List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号取出容器中的元 素;
J2SDK所提供的List容器类有ArrayList, LinkedList等。




Set 接口
Set 接口是Collection 的子接口,Set接口没有提供额外的方法,但实现Set接口的容器类中的元素是没有顺序的,而且不可以重复。
Set容器类中有HashSet,TreeSet等。
List接口中有add, set, indexOf 方法,但是Set接口中却只有add方法,没有set, indexOf方法,因为Set是无序不能重复的,不存在某元素具体位置这个概念。


Map接口:
java.util.Map接口中描述了映射结构,Map结构允许以健集,值集合或键-值映射关系集的形式来查看某个映射的内容。



Collections类




Comparable接口:
基本类型数据和String类型数据,他们的比较方法Java已经提供;用户自定义类对象之间的比较标准需要用户自己定义。
所以 如果一个容器中含有用户自定义类型的数据,并且我们需要对容器进行排序,或者查找某一个元素时,我们必须得制定容器中元素与元素之间比较的标准。
凡是需要进行对象比较排序的场合均可考虑实现Comparable接口。





如果我们经常在List的开始处增加元素,或者在List中进行插入和删除操作,我们应该使用LinkedList,否则的话,使用ArrayList将更加快速。 ArrayList存取速度快,插入速度慢; LinkedList存取速度慢,插入删除速度快。


泛型
就是在类后面加尖括号<> , 不用反复的进行数据类型转化。



Collection, List, Map , Set, Iterator, Comparable.
本文深入解析Java集合框架,包括Collection、List、Set、Map接口及其实现类如ArrayList、LinkedList、HashSet的特点与应用。探讨了迭代器接口、泛型以及Comparable接口的作用,对比了不同容器的性能优劣。
1484

被折叠的 条评论
为什么被折叠?



