黑马程序员技术交流社区
标题:
关于集合的使用总结,求高手,指导,可以这么理解么?
[打印本页]
作者:
朝花夕拾
时间:
2012-11-25 18:58
标题:
关于集合的使用总结,求高手,指导,可以这么理解么?
如果你使用的集合要保证元素唯一:Set
你想排序吗?
不想:HashSet
想:TreeSet
不懂:HashSet
如果你使用的集合不用保证元素唯一:List
你是用于查询吗?ArrayList
你是用经常改变吗?LinkedList
有多线程安全问题吗?Vector
真的不懂:ArrayList
小技巧:
Array:说明底层数据结构是数组,查询快,增删慢
Link:说明底层数据结构是链表,查询慢,增删快
Hash:说明底层数据结构是哈希表,保证元素唯一,要依赖hashCode和equals。
Tree:说明底层数据结构是二叉树,有两种方案保证唯一和排序:
A:Comparable -- compareTo
B:Comparator -- compare
作者:
潘天功
时间:
2012-11-25 19:28
List的子实现类
List
|--ArrayList
底层数据结构是数组,而且是线程不安全的。
增删慢,查询快
|--Vector
底层数据结构是数组,而且是线程安全的。
增删慢,查询快。但是,又由于线程安全,所以,它是都慢。一般不选择。
|--LinkedList
底层数据结构是链表,而且是线程不安全的。
增删快,查询慢
一般情况下,使用哪种List接口下的实现类呢?
如果要求增删快,考虑使用LinkedList
如果要求查询快,考虑使用ArrayList
如果要求线程安全,考虑使用Vector。
如果考虑不到任何问题,就使用ArrayList。
Set 元素无序(存储顺序和取出顺序不一致),不可重复。
|--HashSet
底层数据结构是哈希表。线程不安全。
如果保证元素的唯一性呢?
A:首先根据hashCode值判断。
B:如果hashCode值不同,那么,这就是不同的元素。直接存储。
如果hashCode值相同,那么,会继续根据equals方法进行判断,
根据自己的需求来决定元素是否相同。如果相同,就不存储。否则,存储。
一般,用HashSet的时候,要重写hashCode和equals方法。
|--LinkedHashSet
底层数据结构是链表和哈希表。
链表用于保证元素有序,哈希表用于保证元素唯一。
|--TreeSet
底层数据结构是二叉树,线程不安全。
如何保证元素的排序呢?两种方式
A:让元素本身具备比较性
实现Compareable接口中的compareTo方法。
B:让集合具备比较性
实现Comparator接口中的compare方法。
以后到底用哪个集合呢?
A:如果要元素唯一,就用Set。否则,用List。
B:如果元素唯一并且要排序用TreeSet,否则,用HashSet。
C:如果元素可重复,且考虑线程问题,用Vector。
否则,用ArrayList或者LinkedList。
如果要求,增删快,那么,考虑LinkedList。
如果要求,查询快,那么,考虑ArrayList。
D:当你什么都不清楚的时候,就使用ArrayList。
Array:想到数组,就应该想到数组的索引。
Link:想到链表,就应该想到增删快。最好能想到addFirst。
Hash:想到哈希表,就应该想到元素的hashCode和equals方法。
Tree:想到二叉树,就应该想到排序。最好能想到两个接口Compareable和Comparator
这是我上课时我们老师讲的、挺详细的,希望对你有用
作者:
朝花夕拾
时间:
2012-11-25 22:24
潘天功 发表于 2012-11-25 19:28
List的子实现类
List
|--ArrayList
谢谢你,跟我理解的差不多!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2