java再复习——Collection体系

来源:互联网 发布:led屏幕软件下载 编辑:程序博客网 时间:2024/06/10 04:09

Collection体系作为开发中最常用的东西,值得再次梳理一下。

体系图:


Collection作为集合的顶层接口,它也有顶层接口,就是Iterable,为了描述所有集合必须有迭代器来进行遍历与取值的共性。

Collection中最常用的两类实现接口为: List与Set.

为什么分为两类?因为所存储数据时的数据结构不一样

List: 这一类的容器,数据是有序的,并且可以重复,有索引。

Set: 这一类的容器,数据是无序的,不可以重复,无索引。


List和Set作为Collection的实现接口,他们的共同点为都有增删和取得迭代器的方法。

List体系的特有方法是: 所有与索引有关的方法都是List体系特有的,例如 list.set(2,"哈哈") ,将索引为2的数据改为“哈哈”,或者list.get(2);


关于Collection体系的迭代器:每一个具体实现子类的迭代器作为内部类存在与子类中,并提供hasNext()判断有无数据,next()取得数据,remove()删除数据。而且每个子类自己的Iterator实现是不一样的,因为数据结果不一样,所以Iterator的实现细节肯定是不一样的。而且在迭代器遍历的时候,不可以使用子类的具体API来对集合进行增删改等操作,否则会报java.util.ConcurrentModificationException。

ListIterator : 作为List体系特有的Iteraotr,他可以在迭代过程中对List进行增删改。


List各个常用具体实现类的区别:

ArrayList: 底层是数组实现,内存连续,所以查找快(因为有索引),但是增删慢(因为要移动元素)

LinkedList: 底层是链表实现,内存不联系,查找慢(因为得一个接着下一个的找),增删快(直接改变元素之间的链接就好了)

Vector: 与ArrayList一样的实现,只不过是线程安全的,但是效率很低,已被弃用。


LinkedList特有方法: 

list.getFirst();//得到第一个元素,没有会抛异常list.getLast(); //得到最后一个元素,没有会抛异常list.removeLast(); //删除最后一个元素,没有会抛异常list.removeFirst();//删除第一个元素,没有会抛异常list.peekFirst();//得到第一个元素,没有返回nulllist.peekLast();//得到最后一个元素,没有返回nulllist.pollFirst();//删除第一个元素,没有返回nulllist.pollLast();//删除最后一个元素,没有返回null

Set各个常用具体实现类的区别:

HashSet : 底层是哈希表实现的,保证数据唯一性是根据先比较hashCode()方法,如果不一样的话则认为不一样,如果一样的话再比较equasl()方法,如果一样的话认为一样,如果不一样的话认为不一样。值得注意的是,List中contains()方法来判断是否是同一个对象,只比较equals()方法。

TreeSet : 底层是二叉树实现的,它不是完全的无序,是它自己有直接的排序规则,就是二叉树的排序规则,而且进入到这个集合的元素必须具有排序性,也就是如果对象没有实现过comparable接口的对象必须实现,否则会报错。还有一种排序方法就是,再new TreeSet的时候传入Comparator比较器,来排序,如果两者都存在,以Comparator比较器优先。这是Comparable和Comparator的区别,一个是给类实现的接口,一个是独立使用的接口,一般会new一个匿名内部类对象来用。


0 0
原创粉丝点击