Collection是什么??
interface=接口。毫无疑问,那么接口中有什么方法呢?
其继承类必须重写接口的所有方法,那么是不是看一下Collection里的方法就掌握了大部分子类的方法了呢???理论上了来说:是的!
看一下其他方法:
首先,增删改查: add(元素)添加元素,删除操作有两种的:一是clear()清空容器;另一个就是通过使用remove(元素)实现删除指定元素。不好意思 不支持改这个操作,哈哈哈。查询有二种操作:一是产生迭代器 iterator 因为他继承了了Iterable接口,通过对迭代器的操作实现对产生的数组容器的查询;还有一种是查询是否有该内容的元素,通过contians(元素)方法,返回值是一个boolean类型的参数 有则是True,没有就是False。然后,判断容器是否为空容器用isEmpty()方法。返回数组容器存储元素个数使用的是size()。大体就介绍完了,然后看一下其子接口。
谁继承或者实现了Collection接口了呢?
不好意思,并没有实现类,只有二个继承的子接口–List(注意一下是接口,不是实现类)以及Set。
现在来看一下这个List接口,它又可以干嘛,照旧先看方法。你会发现他并没有新增什么方法,不完全跟Collection接口一样,增加了一些东西不过不影响操作,值得注意的是添加了set(下标,替换后的元素)方法对指定下标元素的替换,get(下标)返回元素,基本就可以了。然后我们看一下他有什么特性呢?存储有序,元素可重复。那么他的实现类或者继承接口应该也是这么个规则。再看他是否有实现类或者继承的子接口。
Set接口在方法上基本上没有增加什么太多的新操作,只是在Collection的基础上拓展了一下,是个比较保守的马仔。他的实现类是HashSet以及他的继承子接口是SortedSet接口。其次Set的特性是存储无序且不可重复。
谁继承或者实现了List接口了呢?
你会发现这货的小弟挺多的 属于一个高级马仔,主要的有ArrayList,LinkedList还有一个Vector,Vector是来搞笑的。那就说一下ArrayList和HashList的区别吧:首先存储结构不一样,也就是说底层实现这两个容器的数据结构不同,其中ArrayList的底层使用数组实现的,HashList底层是用双向链表实现的,这样会带来两者之间从本质上发生区别:ArrayList便于查询,但是删除就会改变整个线性存储空间结构整个进行对应位移补位;那么HashList呢?增删就没有那么方便,数据的地址存储在节点之内,每次大量增加数据时就会产生很多的资源占用,其次因为不是线性的所以查询的话也是很慢的。但是后期对其进行定向删除或者插入操作时会更加快捷,因为在节点中还会存入上下节点的存储地址,其次删除时也只需要将上下节点存储本节点的地址进行更改就可实现删除,增加则相反对应位置插入存储地址即可。
vector你需要记住的就是她是线程安全的,但是效率很低,底层跟ArrayList的实现一样,也是数组的实现方式。
Set小弟们的特性
实现子类HashSet: 同时也实现了Iterable,Cloneable和Serializable接口 重写了一个clone(),可基于本容器实例化的对象,实现对元素的浅层克隆,但是存储的数据地址依然和原对象相同,所以被称为浅层次克隆;可对外提供迭代器;实例化的对象可进行序列化操作,其实序列化也是实现深层次克隆的重要手段,即将存储元素的地址也进行克隆,实现从容器到存储内容的全部克隆,称之为深度克隆。实现了同接口的类也支持相应操作!其底层是用HashMap实现的,详细查看源码会发现其实就是用了HashMap的key来存储元素,vules采用统一赋值的方式。除此之外,其本身的由于HashMap的限制因素导致可以使用空元素来进行存储。可添加空元素!!!
继承的子接口SortedSet,可实现存进去的元素自动按元素大小排序,其实现类为TreeSet。其实用于元素排序等操作,对于以一定大小顺序输出元素有一定的优势,但是仅限于数字类型的排列,其他类型的排列无法实现。禁止添加空元素!!!