黑马程序员技术交流社区

标题: 关于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