黑马程序员技术交流社区
标题:
关于集合的问题
[打印本页]
作者:
kongling
时间:
2013-12-8 23:17
标题:
关于集合的问题
list的实现类有ArrayList和LinkedList,有什么特点,用在什么场合更合适?
Set的实现类HashSet和TreeSet有什么特点,用在什么场合更合适?
作者:
依然
时间:
2013-12-8 23:26
本帖最后由 依然 于 2013-12-8 23:29 编辑
ArrayList和HashList是有序集合,可以存放重复元素。
ArrayList底层数据结构是数组结构。适合频繁的查询操作。
HashList底层使用链表数据结构,适合数据非常多的、频繁的增删的操作。
Set特点:元素无序,不可重复,没有索引,
HashSet:底层数据结构是哈希表。
TreeSet:底层数据结构是二叉树,可以对Set集合中的元素进行排序。
作者:
Household
时间:
2013-12-8 23:38
ArrayList其实是包装了一个数组 Object[],当实例化一个ArrayList时,一个数组也被实例化,当ArrayList中添加对象时,数组的大小也相应的改变。这样就带来以下3个缺点:
1,快速随即访问 你可以随即访问每个元素而不用考虑性能问题,通过调用get(i)方法来访问下标为i的数组元素。
2,向其中添加对象速度慢 当你创建数组是并不能确定其容量,所以当改变这个数组时就必须在内存中做很多事情。
3.操作其中对象的速度慢 当你要想数组中任意两个元素中间添加对象时,数组需要移动所有后面的对象。
LinkedList是通过节点直接彼此连接来实现的。每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。当一个新节点插入时,只需要修改其中保持先后关系的节点的引用即可,当删除记录时也一样。这样就带来以下有缺点:
1,操作其中对象的速度快 只需要改变连接,新的节点可以在内存中的任何地方;
2,不能随即访问 虽然存在get()方法,但是这个方法是通过遍历接点来定位的,所以速度慢。
这样子避免各自的缺点,选择相应合适的方法既可以解决问题啦!
至于Set的实现类HashSet和TreeSet 的特点与合适场合讲解,毕老师视频课程那确实是经典!!
作者:
钟成军
时间:
2013-12-8 23:48
ArrayList:支持可随需要而增长的动态数组。
在java中,标准数组是定长的,在数组创建后,它们不能被加长或缩短,这也就意味着开发者必须事先知道数组可以容纳多少元素,但是在一般情况下,只有在运行时才能知道需要多大的数组,为了解决这个问题,类集框架定义了ArrayList类。所以当需要动态地增加或减小其大小时,用ArrayList创建数组。
LinkList:类提供了一个链接列表的数据结构。它定义了一些有用的方法,这些方法主要用于操作和访问列表。
HashSet:它创建一个类集,该类集使用散列表进行存储,而散列表则通过使用称之为散列法的机制来存储信息。散列集合并不能确定其元素的排列顺序,因为散列法的处理通常不让自己参与创建排序集合。
TreeSet:为使用树来进行存储的Set接口提供了一个工具,对象按升序存储,访问和检索是很快的,在存储了大量的需要进行快速检索的排序信息的情况下,TreeSet是一个很好的选择。
作者:
史超
时间:
2013-12-9 09:48
ArrayList底层是object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。
而在LinkedList的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组成:前指针 指向前面的节点的位置 ,数据,后指针 指向后面的节点的位置 。最后一个节点的后指针指向第一个节点的前指针,形成一个循环。
双向循环链表的查询效率低但是增删效率高。所以LinkedList具有查询效率低但增删效率高的特点。
ArrayList和LinkedList在用法上没有区别,但是在功能上还是有区别的。
LinkedList经常用在增删操作较多而查询操作很少的情况下:队列和堆栈。
队列:先进先出的数据结构。
堆栈:后进先出的数据结构。
作者:
┾——黑马
时间:
2013-12-9 09:52
list集合set集合的区别:
List:元素是有序的,元素可以重复。因为该集合体系有索引。
List集合体系:ArrayList:底层的数据结构使用的数组结构;优点:查询很快,缺点:增删慢;是线程不同步的
LinkedList:底层的数据结构使用的是链表结构;优点:增删速度快;缺点:查询速度慢
LinkedListJDK1.6新特性:为了解决如果集合中没有要取出和删除的元素报的NoSuchElementException的异常所以出现了这些新特性,这些新提供的方法如果没有元素则会返回null
添加:offerFirst(),offerLast()
取出:peekFirst(),peekLast()
删除:pollFirst(),pollLast()
Vector:底层的数据结构使用的是数组结构,是线程同步的,Vector已经被ArrayList所取代了
Set:元素是无序的,元素不可以重复以便保证唯一性。
Set接口中的方法和Collection的方法一致
Set集合体系:HashSet:底层的数据结构是哈希表,是不同步的
哈希表确定内容是否相同原理:1,判断的是两个元素的哈希值是否相同,如果相同,再判断两个对象的内容是否相同;2,判断哈希值相同其实用的就是用hashCode()方法,判断内容相同,用的是equals方法。3,如果哈希值不同,则不用判断equals方法
LinkedHashSet:和HashSet是相同的用法,区别在于LinkedHashSet是有序的
注意:如果元素要存到HashSet中去,必须覆盖hashcode和equals方法。一般情况下,如果用户自定义的类会产生很大对象,通常都要覆盖equals和hashcode方法。建立判断对象是否相同的依据。
TreeSet:底层使用的二叉树;使用元素的自然排序对元素进行排序,是不同步的;而且只能储存相同类型的对象类型
判断元素唯一性的方式:就是根据比较方法返回结果是否为0,是0就相同,不是就不相同,表示不存在。
排序方式一:
TreeSet对元素的排序方法通常都是实现Comparable接口,覆盖compareTo方法
排序方式二:
如果不要按照元素本身具备的自然排序方式,或者元素本身不具备自然排序怎么解决:这时候可以让集合自身具备比较功能,传入比较器
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2