前言:
这篇准备好好总结一下Java的集合类,在顺便带上Arrays,把这几者之间的关系说清楚,在java.util包中提供了一些集合类,这些集合类又被称作容器,这时候可能我们就联想到了就是Arrays,他们之间不同的地方就是:数组的长度是固定的,集合的长度是可变的;数组是用来存贮基本类型的数据,集合用来存放对象的引用,最常用的大家也都是知道,List集合,Set集合,还有Map集合。这其中呢List集合和Set集合继承了Collection接口,他们的关系如下图,按自己的理解这样,要是有不正确的地方告诉我哈:
下面这样是更细致完整点的,谢谢同行:
Collection接口:
它是层级结构中根接口,构成它的单位称为元素。一般情况下不会直接使用它,上面的结构图我们也可以看出,List和Set方法都是继承与它的,所以也就继承它的方法,常见的我们下面也做了总结:
下面是上面代码的打印日志:
List接口:
List是继承与Collection的,所以Collection的方法List都可以用,不过有两个方法特别注意的:
(1): get(int index) 获得指定位置处的元素
(2): set(int index , Object obj) 将集合中指定位置处的对象修改为对象obj. 尤其这个方法,我刚开始在想Javay应该不可能不会有替代某位置元素的方法,找了许久,但没想到是这个set方法。
List接口的常用两个实现类,一个是ArrayList,一个是LinkedList,一个一个说说:
ArrayList: 可变的数组,允许保存所有的元素,当然就包括null。它的优点是:可以快速的随机访问index处的对象 缺点是:指定位置插入删除是速度慢
LinkedList:采用链表结构保存对象,它的优缺点和上面我们说的ArrayList的也就相反了。
看看ArrayList最基本的使用:
下面是打印的结果:
Set接口:
Set结合中的对象不按照特定的方法排序,只是简单的把对象加入到集合中,但是很重要的一点就是Set集合中不能包含重复的对象,Set和List一样是继承自Collection的。
Set接口常用的实现类有HashSet和TreeSet
HashSet类实现了Set接口,有哈希表(实际上是HashMap)支持,它不保证Set的迭代顺序,特别是它不包证高顺序的持久不变。 此类允许使用null。
TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口。因此,TreeSet类实现的Set集合在遍历集合时可以按照自然顺序排序,也可以按照指定比较器递增排序,也就是可以通过比较器对TreeSet类实现的Set集合中的对象进行排序,下面定义了一个StudentClass类,重点是这类要想添加到TreeSet实现的集合当中的话就得实现Comparable接口,实现compareTo方法:
下面是它的调用和打印的东西,我们粘贴出来,在最后会是打印的日志:
随后是打印的日志,可以看到是没有问题的:
Map接口:
Map集合没有继承Collection接口,它提供的Key到Value的映射,Map中不能包含相同的Key,每一个Key只能映射一个Value,下面是Map的基本使用,其实举一反三,这时候也大概知道怎么写怎么用了;
建议使用HashMap集合,因为HashMap类实现Map集合,原因也是它的优点,集合添加和删除映射关系的效率更高。HashMap是基于哈希表的Maori实现。HashMap通过哈希码对内部的映射关系进行快速的查找,而TreeMap类的映射关系存在一定顺序,如果希望Map集合对象也存在一定的顺序,就用TreeMap.
后面的Arrays的使用因为在总结算法的学习,在自己的《算法学习》分类中再总结它的具体使用,从Arrays的冒泡和选择排序开始。