黑马程序员技术交流社区
标题:
关于Java的集合List,Set,Vector,HashMap,HashTable的
[打印本页]
作者:
888_loveyou
时间:
2014-4-8 14:51
标题:
关于Java的集合List,Set,Vector,HashMap,HashTable的
关于Java的集合List,Set,Vector,HashMap,HashTable的特点,异同,定义,这些答案的记忆和理解???
作者:
菠萝鱼
时间:
2014-4-8 15:28
Collection接口的有两个子接口:
List和Set,List元素有序,元素可以重复,Set元素无序,元素要求唯一。
Collection
|---->List可存放重复元素,元素存取是有序的。因为该集合体系有索引。
|---->Vector:底层的数据结构是数组,线程安全,但速度慢,已被ArrayList替代。
|---->ArrayList:底层的数据结构是数组。特点:查询速度很快。但是增删稍慢。线程不同步。
|---->LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|---->Set元素是无序(存入和取出的顺序不一定一致),元素不可以重复
|---->HashSet:底层数据结构是哈希表,是线程不安全的,不同步。
|---->TreeSet:可以对Set集合中的元素进行排序
Map常用类:
|---->Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低,已被HashMap替代。
|---->HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,线程不同步,将hashtable替代,jdk1.2.效率高。
|---->TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序,排序原理与TreeSet相同。
作者:
一世英明
时间:
2014-4-8 15:41
List集合 具体实现包括 ArrayList 和 Vector ,它们是 可变大小的列表,比较适合构建,存储和操作任何类型对象的元素列表.List 适用于按 数值索引访问元素的情形.
List 和 Set 的异同点: 它们都可以迭代出所有元素,迭代时先要得到一个iterator 对象,所以,set 和List 类都有一个Iterator 方法,用于返回那个 iterator 对象.map 可以返回三个集合,一个是返回所有的key 的集合,另外一个返回
的是所有 value 的集合,再一个返回的key 和 value组合成的EntrySet 对象的集合, map 也有
get 方法,参数是 key,返回值是 key 对应的 value;\
HashMap 和 hashTable 的区别!
HashMap 是 HashTable 的轻量级实现(非线程安全的实现),它们都完成了Map 接口,主要区别在于HashMap
是 允许空(null) 键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable ;
HashMap 允许将 null 作为一个entry 的key 或者 value,而 Hashtable 不允许. HashMap 把 Hashtable
的 contains 方法去掉了,改成 containsvalue 和 containsKey,因为 contains 方法容易让人引起误解;
Hashtable 继承自 Dictionary 类,而 HashMap 是 Java1.2 引进的Map interface 的一个实现.
最大的不同是,Hashtable的方法Synchronize的,而HashMap 不是,在多个线程访问Hashtable 时,不需要自己为它的方法实现同步,而 HashMap 就必须为之提供外同步.
Hashtable 和HashMap 采用的Hash/Rehash算法 都大概一样,所以性能不会有很大的差异.
就HashMap 与 HashTable 主要从三方面来说;
一: 历史原因:Hashtable是基于陈旧的Dictionary 类的,HashMap 是 Java 1.2 引进的Map 接口的一个实现;
二:同步性:Hashtable 是线程安全的,也就是说是同步的,而HashMap 是线程不安全的,不是同步的
三: 只有 HashMap 可以让你将空值作为一个表的条目的key 或 value;
作者:
Monkey·D·Chas
时间:
2014-4-8 17:37
我看的时候做的笔记
collection:
|--List:元素是有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度快,但是增删速度慢,线程不同步。
|--LinkedList:底层的数据结构使用的是链表结构。特点:增删速度慢,但是查询速度慢
|--Vector:底层是数组数据结构。线程同步的,被ArrayList替代了。
|--set:元素是无序的,元素不可以重复
|--HashSet:底层数据结构是哈希表。线程是非同步的。
HashSet是如何保证元素的唯一性的?
是通过元素的两个方法,hashCode和equals来完成的。如果元素的hashcode值相同,才会判断equals是否为true。如果元素的hashcode值不同,不用判断是否相同。
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
|--TreeSet:底层数据结构是树。
可以对set集合中的元素进行排序。
自定义对象需要实现comparable接口中的comparableTo方法。
List:
特有的方法:凡是可以操作角标的方法都是该体系的特有方法.
增:add (index,element);
addAll (index,Collection);
删:remove (index);
改:set (index,element);
查: get(index);
subList(from,to);
还可以for循环遍历list;
通过indexof 获取对象位置
indexof(element);
list集合特有的迭代器:listIterator是Iterator的子接口
在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生concurrentModificationExceptiony异常。
所以,在迭代器时只能用迭代器的方法操作元素,可是Iterator方法有限的,只能对元素进行判断,取出,删除的操作, 如果想要其他的操作如添加,修改等,就需要使用其子接口ListIterator
该接口只能通过List集合的ListInterator对象实现
LinkedList特有方法: 1.6 以后出现新的方法了
addFirst();头插法
addLast();尾插法
getFirst(); 获取头元素,如果集合中没有元素会出现NoSuchElementException
getLst();获取尾元素,如果集合中没有元素会出现NoSuchElementException
removeFirst(); 获取后删除,如果集合中没有元素会出现NoSuchElementException
removeLast();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2