黑马程序员技术交流社区
标题:
集合框架
[打印本页]
作者:
j816326
时间:
2013-7-1 16:52
标题:
集合框架
学习完集合之后,在总结的时候想到一个问题
List、Map、Set三个接口,存取元素时,各有什么特点?
作者:
进击的SJ君
时间:
2013-7-1 17:39
有查找数据的需求,用map,没有就用list,set不太懂
作者:
张承富
时间:
2013-7-1 17:53
视频没细看吧?
list有序存储,可以有重复元素
set无序存储,不可以有重复元素
map以键值对形式存储
还能再细分
list
arraylist 底层数组结构存储,非同步
linkedlist底层链表结构存储
vector底层数组结构存储,线程同步
set
hashset 底层哈希结构存储
treeset 底层二叉树结构存储
map
hashmap 底层hash结构存储键值对,可以有一对空键值对,非同步
treepmap底层二叉树结构存储键值对
hashtable底层hash结构存储,不可以有空键值对,线程同步
作者:
肥猫
时间:
2013-7-1 17:56
Set和LIST的区别在于其有序和无序啊,LIST在存取时默认按照元素的添加顺序设置索引,进行查询等操作时就根据索引来操作;另外SET在判别两元素是否相同时用到equal和hashcode;MAP则是用于保存具备映射关系的数据,就是健/值对,无论对其进行增删改查,都要从KEY入手.
作者:
刘_鑫
时间:
2013-7-1 23:29
|-- 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
作者:
花伟昌
时间:
2013-7-2 00:02
单列集合根接口: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集合,再取元素。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2