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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

5 个回复

倒序浏览
有查找数据的需求,用map,没有就用list,set不太懂
回复 使用道具 举报
视频没细看吧?
list有序存储,可以有重复元素
set无序存储,不可以有重复元素
map以键值对形式存储
还能再细分
list  
arraylist 底层数组结构存储,非同步
linkedlist底层链表结构存储
vector底层数组结构存储,线程同步

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

map
hashmap 底层hash结构存储键值对,可以有一对空键值对,非同步
treepmap底层二叉树结构存储键值对
hashtable底层hash结构存储,不可以有空键值对,线程同步
     
回复 使用道具 举报
Set和LIST的区别在于其有序和无序啊,LIST在存取时默认按照元素的添加顺序设置索引,进行查询等操作时就根据索引来操作;另外SET在判别两元素是否相同时用到equal和hashcode;MAP则是用于保存具备映射关系的数据,就是健/值对,无论对其进行增删改查,都要从KEY入手.
回复 使用道具 举报
|-- 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
      
回复 使用道具 举报
单列集合根接口: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
您需要登录后才可以回帖 登录 | 加入黑马