A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© j816326 中级黑马   /  2013-7-1 16:52  /  2002 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

学习完集合之后,在总结的时候想到一个问题
List、Map、Set三个接口,存取元素时,各有什么特点?

5 个回复

正序浏览
单列集合根接口:Collection
                                      |------>子接口:List
                                      |------>子接口:Set

List集合接口实现类:(常用)ArrayList,LinkedList,Vector
 此集合允许存储重复的元素,存入和取出顺序一致。元素的取出通过集合调用Collection的迭代器方法:iterator()获取迭代器对象Iterator,再通过迭代器对象的方法hasNext() ,next()来判读是否有元素,和取出元素。同时List集合中,还有一个特有的迭代器就是ListIterator();集合调用listIterator()方法,获取ListIterator对象,然后取出集合中的元素,此迭代器相比较Iterator而言,是在迭代的同时,可以对集合进行修改。Vector集合还可以调用elements(),获取枚举对象Enumeration来取元素。

Set集合接口实现类:(常用)HashSet,LinkedHashSet,TreeSet
   此集合不允存储重复的元素,存入和取出顺序不一致。
 HashSet集合:元素的存储会调用元素的hashCode()和equals()方法,判断是否是相同元素,相同的元素则不存储,所以此集合中存储的元素一般要覆写hashCode(),equals()方法。元素的取出只能通过迭代器Iterator来取元素。
 LinkeHashSet集合是HashSet的子类,此集合可以实现元素的存取顺序一致。
 TreeSet集合:二叉树数据结构,会对元素进行自然排序,这也是存储和元素实现Comparable接口的原因,此集合中存储的元素都要实现Comparable接口,并覆写compareTo()方法,也可以在TreeSet集合中传入自定义的比较器,来实现元素排序。自定义的比较器要实现Comparator接口并覆写compare()方法,如:TreeSet<?>ts=new TreeSet<?>(new CompByName);元素的取出也只能使用Iterator迭代器。

双列集合根接口:Map
Map集合接口实现类:(常用)HashMap,LinkedHashMap,TreeMap
  此集合中存储的是键值对,不允许键的重复,保证键的唯一性,键相同值会被覆盖,元素的存取顺序不一致。
HashMap集合:此集合与HashSet相似,元素的存储会调用键的hashCode(),equals()方法,来判断元素是否相同,所以此集合中存储的键也要覆写hashCode(),equals()方法。元素的取出可以调用entrySet(),keySet()将集合转为Set集合,再取元素。
LinkedHashMap集合可以实现存取顺序的一致。
TreeMap集合:此集合与TreeSet相似,元素的存储会调用键的CompareTo()方法,键要实现Comparable接口,或者传入比较器,类似于TreeSet.自定义比较器要实现Comparator接口,并覆定compare()方法,元素的取出可以调用entrySet(),keySet()将集合转为Set集合,再取元素。


回复 使用道具 举报 2 0
|-- List
    |--有索引,有序
     |-- ArrayList
       |-- 底层是可变数组结构,默认10个,每次增长50%
       |-- 特点:查询块,增删慢,线程不安全
     |-- LinkedList
       |-- 底层是链表数据结构
       |-- 特点:查询慢,增删块,线程不安全
     |-- Vector
       |-- 底层是可变数组结构,默认10个,每次增长100%
       |-- 线程安全,效率低,被ArrayList替代
      
  |-- Set
    |-- 没有索引,无序,不允许重复元素
     |-- HashSet
       |-- 底层是哈希表,不存储重复元素
       |-- 存储自定义对象,需要覆盖对象中的hashCode和equals方法,保证对象对象唯一
     |-- TreeSet
       |-- 底层是二叉树结构,不存储重复元素
       |-- 存储对象,按照对象的自然顺序排序
       |-- 自定义对象,必须具备比较性
         |--对象本身具备比较性,实现Comparable接口,覆盖compareTo方法
         |--TreeSet本身具备比较性,自定义比较器,实现Comparator接口,覆盖compare方法
     |-- LinkedHashSet
       |-- 底层是基于链表的哈希表结构
       |-- 保证元素的存储和取出顺序
Map 集合
  |-- 双列集合,将键映射到值
  |-- 保证键的唯一性,一个键只能映射一个值
  |-- put方法将元素存入到集合
  |-- get方法根据键,获取值,没有这个键,就返回null

什么时候使用哪些集合
  |-- 看实际要求
   |-- 存储对象,不重复 HashSet
   |-- 存储对象,不重复需要排序 TreeSet
   |-- 存储对象,可以重复,需要查询块 ArrayList
   |-- 存储对象,可以重复,增删块 LinkedList
   |-- 存储对象不确定,不知道重复不重复,不知道谁需要更快的操作
       ArrayList -- 不确定用哪个集合时,选择ArrayList
      
回复 使用道具 举报
Set和LIST的区别在于其有序和无序啊,LIST在存取时默认按照元素的添加顺序设置索引,进行查询等操作时就根据索引来操作;另外SET在判别两元素是否相同时用到equal和hashcode;MAP则是用于保存具备映射关系的数据,就是健/值对,无论对其进行增删改查,都要从KEY入手.
回复 使用道具 举报
视频没细看吧?
list有序存储,可以有重复元素
set无序存储,不可以有重复元素
map以键值对形式存储
还能再细分
list  
arraylist 底层数组结构存储,非同步
linkedlist底层链表结构存储
vector底层数组结构存储,线程同步

set
hashset 底层哈希结构存储
treeset 底层二叉树结构存储

map
hashmap 底层hash结构存储键值对,可以有一对空键值对,非同步
treepmap底层二叉树结构存储键值对
hashtable底层hash结构存储,不可以有空键值对,线程同步
     
回复 使用道具 举报
有查找数据的需求,用map,没有就用list,set不太懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马