黑马程序员技术交流社区

标题: 个人对java容器的理解 [打印本页]

作者: 尘埃123    时间: 2015-4-26 12:03
标题: 个人对java容器的理解
Java中的容器体系中最常用的容器ArrayList、LinkList、HashSet、TreeSet、HashMap,TreeMap,对于这些容器的特点经常容易记忆混乱,下面浅谈一下个人对这些容器的比较。
首先,ArrayList、LinkList同属List接口,List的特点是元素有序而且可以重复。造成这种特点的原因是List中存在索引,但是ArrayList和LinkList底层数据结构是不相同的,ArrayList底层是数组结构的;LinkList底层是链表结构,这也造成了它们不同的特性,ArrayList查询速度很快,但是增删稍慢,而LinkList真相反。所以根据它们的这种特性我们很容易的判断出什么时候用哪种容器,如果实在不知道怎么选择建议选择ArrayList,虽然其增删数据较慢,但是在增删的数据量不是特别大的时候也是可以接受的。
其次,HashSet、TreeSet同属Set接口,Set的特点是元素有序,不可以重复,没有索引。但是这两种容器保证元素唯一性的方式确实不同的:HashSet利用重写hashCode方法和equals方法进行判断,如果两个对象经过这两个方法的判断都相等之后都相等则说明这两个对象相等,所以后存入的对象不会进入容器;TreeSet利用实现Comparable接口重写compareTo方法,如果一个对象调用此方法进行判断返回0,则说明容器中已经存在相同的元素,后者不会被加入进来,当自定义对象的时候,如果不知道对象会被存入哪个容器,建议重写HashSet、hashCode、compareTo三种方法,这用不管对象存如哪种容器都不会报异常。
最后,HashMap,TreeMap都是存储的是键值对,出去这一点儿,他们在对元素的处理上和HashSet、TreeSet基本相似,但是由于处理的是键值对,所以他们很特殊,除了自己的特有方法之外,若是想去除其中的元素都要先把元素取出放到一个Set集合中,再利用Set的迭代器去除数据两种思路:1、可以先取出键(key),放入Set中,之后利用get方法取到值;2、把其中的键值映射取出,放入到Set中,注意类型是Map.Entry类型的,然后根据Map.Entry的getKey和getValue方法取到键和值。
说的和笼统,这只是个人的理解,记下权当笔记,希望能和各位朋友探讨。
作者: Taekwon-boy    时间: 2015-4-26 13:02
不错不错。
作者: l_z    时间: 2015-4-26 13:44
总结即是精华!学习学习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2