在计算机科学中:数据结构和算法,需要花费大量的时间和精力。
集合体系:见java必备的截图
一、集合接口 详见API文档。
《一》Collection
1、Collection接口
java库中用于集合类的基本接口就是他 ,他的常见方法:boolean add(Object obj);Iterator iterator();
注意:各个方法的参数,
其中的iterator()返回的是一个Iterator接口的对象,这个对象实现了Iterator接口仅有的三个方法,
然后这个对象就可以使用这三个方法。
2、Iterator接口
又被称为迭代器。仅有三个方法:Object next(); boolean hasNext();void remove();
注意:每一种数据结构的存储方式不同,遍历的方法也不同,每一种数据结构都有各自的iterator()的具体实现,
每种数据结构的存储不同,但是都有一样的 判断和 取出的 动作,将这些动作封装之后就是iterator(),
iterator()是对外提供的方法,具体的实现都是通过各自的内部类实现的。可以见源代码中的具体内部类。
3、ArrayList:底层的数据结果是数组结构,特点:查询速度快,增删慢;线程不同步;
LinkList:底层的数据结构是链表,特点:增删快,查询慢;它其中的方法注意查询;
Vectory:和ArryList一样,Vectory出现在1.0。线程同步;被ArryList替代。
枚举是它的特有的取出方式,被迭代器取代。
4、HashSet: 底层数据结构是哈希表;自定义对象的时候,注意hashCode()和equals(),要复写,因为自带的方法返回的都是不同的哈希地址,
就失去意义了,简单地说就是自定义对象的时候,要求返回的哈希值相同。对于相同对象,hashCode方法返回的哈希值一样,
紧接着会调用equals方法比较对象的内容是否一样,一样就不存。线程不同步。
自动调用hashCode()和equals()。
TreeSet: 可以对集合中的对象排序,按照字典顺序排序,往里面存的对象是要排序的,要求对象首先具有可比较性,必须继承Comparable接口,
该接口强制对象的类具有比较性,然后覆盖接口的方法compareTo(),自定义排序方法。具体的查看API中Comparable接口。
还有一种比较方法,就是自定义的定义,当对象不具有比较功能的时候,改变构造方法。
底层的数据结构是:二叉树,元素多的话,二叉树会取折中值,默认从小到大取值;二叉树在存数据的时候,依据于compareTo()的返回结果;
自动调用compareTo()。java很多的类已经是实现了compareTo(),都有比较性并且有特有的比较方法。
《二》、Map
1、Hsahtable:底层是实现哈希表,不可以存入null值和null键;线程同步。jdk1.0
2、Hashmap:底层是实现哈希表,允许null值和null键;线程不同步。 效率高,jdk1.2
3、Treemap:底层的数据结构是:二叉树,线程不同步,可以给map集合中的键值排序。
和Set很像,其实set集合底层使用的是map
《三》、集合框架工具类
集合中涉及许多数据结构的细节,集合框架提供了许多方法,屏蔽了数据结构底层的操作,是操作集合类变得简单,但是建议看看每个
工具类的具体方法的实现的源码。对数据结构,有会有认识。
Collections 类
对集合进行操作的类;参照API的方法集。
Arrys类
对集合进行操作的类
迭代器支持所有的Collection集合,不支持Map集合,高级for循环支持含有迭代器的集合和数组。Map集合可以变通地使用高级for遍历。
二、比较
接口 Comparable<T> 是java.lang 中的接口,只有一个方法compareTo();
此接口强行对实现它的每个类的对象进行整体排序。
这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
接口 Comparator<T> 是java.util 中的接口,有两个方法compare()和equals();
强行对某个对象 collection 进行整体排序 的比较函数。