黑马程序员技术交流社区
标题:
关于集合的一些问题?
[打印本页]
作者:
陈虹旭
时间:
2012-10-29 12:33
标题:
关于集合的一些问题?
复习的时候有点乱,搞不懂什么时候用什么集合...
List集合、Set集合和Map集合的区别在哪里,子类集合的结构及特点是什么?
一般什么情况使用List集合,什么时候使用Set集合,什么时候使用Map集合?
希望能讲的详细一点,谢谢各位大虾~~
作者:
李铁
时间:
2012-10-29 12:51
本帖最后由 李铁 于 2012-10-29 12:53 编辑
下面是我的学习日记里整理的,参考一下!
collection
|--List:元素是有序的,元素可以有重复,因为该集合体系有索引。
|--ArrayList
底层数据结构是数组,线程不安全。
增删慢,查询快。
|--Vector
底层数据结构是数组,线程安全。
增删慢,查询快。但是,线程安全,效率就低。所以查询也慢。
|--LinkedList
底层数据结构是双向链表,线程不安全。
增删快,查询慢
| -- Set:元素是无序(存入与取出的顺序不一定一致),不可重复的。
|--HashSet:底层数据是哈希表,线程是非同步的。
HashSet是如何保证元素的唯一性的呢?
是通过两个元素的hashcode和equals来完成的,
如果元素的hashcode的值相同,才会判断equals是否为true,
如果元素的hashcode的值不同,不会调用equals方法。
注意:对于判断元素的是否存在,以及删除操作,依赖的方法是元素的hashcode与equals方法
|--TreeSet:可以对Set集合中的元素进行排序,底层数据是二叉树;保证元素的唯一性的依据,compareTo方法return 0。
TreeSet的第一种排序方式:让元素自身具备比较性,元素需要实现compareble接口,
覆盖compartTo方法;也叫元素的自然顺序,或者是默认顺序。
TreeSet的第二种排序方式:当元素自身不具备比较性,或者具备的比较不是所需要的;
这时需要让容器自身具备比较性。
定义一个类,实现comparator接口,覆盖compare方法。
当两种排序都存在的时候,以比较器为主;开发建议使用第二种排序。
注意当排序时,当主要条件相同时,一定判断一下次要条件。
Map:该集合储存键傎对,一对一的往里存,而且要保持键的唯一性。
|--HashTable:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的,jdk1.0;效率低!
|--HashMap:底层是哈希表数据结构,允许使用入null键null值,该集合是不同步的,将HashTable代替,jdk1.2,效率高!
|--TreeMap: 底层是二叉树数据结构,线程不同步;可以用于给Map集合中的键进行排序。和set很像,set底层就是用了Map集合。
作者:
崔政
时间:
2012-10-29 12:53
楼上的答案已经让我不知道说什么好了。
我想说的和他一样- -
作者:
廖智
时间:
2012-10-29 13:25
本帖最后由 廖智 于 2012-10-29 13:27 编辑
Collection和Map是集合框架中的两个顶层接口。
而List和Set都是Collection集合中的常用的子接口。
他们之间的关系层次和特点:
Collection接口(单列集合):Collcetion和它的子类一次只能存储一个元素,称为但列集合。
|--List接口:
特点:
1、存储的元素顺序和取出元素的顺序一致。
2、该集合中的元素都有索引,可以通过索引来访问元素。
3、可以存储重复元素(重点)。
|--Set接口:。
特点:1、不能存储重复元素。
Map接口(双列集合):Map和它的子类一次能存储一对元素,称为双列集合。存储的都是具备对应关系的键和值。
想要取出元素,必须得先转成Set集合才能取。
集合什么时候使用?
什么时候使用map(双列集合):
当分析问题时,发现其中存在着映射关系,这时应该考虑两个容器,一个是map,一个是数组。
如果映射关系的一方是有序的编号(可以作为角标),而且映射关系的个数确定,建议使用数组。
否则,就是用map集合。
单列集合什么时候使用?(单列集合)
set集合:如果要保证元素的唯一性,不存在映射关系,必须先考虑set集合。
List集合:如果不需要保证唯一性,直接考虑List集合。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2