Java集合框架

来源:互联网 发布:js面向对象继承 编辑:程序博客网 时间:2024/06/06 03:46

---------------------- android培训、java培训、期待与您交流! ----------------------

java集合框架

 

         集合是用来存储对象的容器,和数组类似,优点在于长度可变. 可以存储多种类型的数据.

.集合分类

         1.Collection:单列集合,一次存储一个对象.

                   List:可重复,可以根据索引操作.

                            *ArrayList:数组结构, 查找快

                            *LinkedList:链表结构, 增删快

                            Vector:数组结构,线程安全, 效率低

                   Set:不可重复,不能根据索引操作.

                            *HashSet:使用哈希算法对元素去重复, 效率高

                            *TreeSet:在指定排序算法之后, 以二叉树形式进行存储,对元素进行排序

                            LinkedHashSet:HashSet的子类,原理相同, 但是添加了保留存储顺序的功能

         2.Map:键值对,可以通过键对象查找值.

                   *HashMap:去重复, 效率高

                   *TreeMap:排序

                   LinkedHashMap:保留存储顺序

                   Hashtable:HashMap原理相同,线程安全, 效率低 . Hashtable中的键和值都不能为null

                   Properties:通常用来操作配置文件, Hashtable的子类.

 

Collection

.List集合

         List集合是一种有存储顺序,并且可以重复的容器

         *1.List的常用方法

                   添加元素

                            booleanadd(E e)

                            voidadd(int index, E element)

                            booleanaddAll(Collection<? extends E> c)

                   删除元素

                            Eremove(int index)

                            booleanremove(Object o)

                            voidclear()

                   替换元素

                            Eset(int index, E element)

                   获取元素

                            Eget(int index)

                   获取长度

                            intsize()

        *** 2.List的迭代

                 a.普通for循环

                           由于List是有序的,可以通过索引获取元素, 所以可以定义for循环,0循环到size()-1,每次获取1个元素

                 b.迭代器

                           调用Listiterator()方法获取迭代器,然后调用hasNext()方法判断是否包含下一个元素,调用next()获取下一个元素

                 c.增强for循环

                          

        * List集合的实现类

         1.ArrayList

                   数组实现,查找快, 增删慢

         2.LinkedList

                   链表实现,增删快, 查找慢

         3.Vector

                   原理和ArrayList相同,线程安全, 效率低

 

.Set集合

          1.什么是Set集合

                   Set集合中素没有存储顺序,不可重复.

         *2.Set集合的常用方法

                   添加元素

                            booleanadd(E e)

                            booleanaddAll(Collection<? extends E> c)

                   删除元素

                            booleanremove(Object o)

                            voidclear()

                   获取长度

                            intsize()

                   获取迭代器

                           Iterator<E>iterator()

        *** 3.Set集合的迭代

                 a.使用迭代器

                 b.增强for循环

        4.常用的Set

                 *** a.HashSet

                           去重复, 速度快

                           HashSet在存储元素的时候,先调用对象的hashCode方法,计算一个哈希值, 然后在集合中查找是否有哈希值相同的对象

                                   如果没有哈希值相同的对象,直接存入

                                   如果有哈希值相同的对象, 则和哈希值相同的对象进行equals比较

                                              equals比较结果为false就存入

                                              equals比较结果为true则不存

                           如果我们想在HashSet中存储自定义对象,并且去重复, 那么这个自定义的类必须重写hashCodeequals方法.

                 *** b.TreeSet

                           去重复, 排序

                           在向TreeSet中存储元素的时候,TreeSet会使用指定的比较算法对存储元素进行排序,内部以二叉树形式进行存储.

                           指定比较算法的方式:

                                   自然顺序: 在类上实现Comparable接口,重写compareTo方法,在方法中定义比较算法.

                                   比较器顺序: 定义类实现Comparator接口,重写compare方法,创建比较器对象, 传入TreeSet构造函数.

                           如果我们想在TreeSet中存储自定义对象,并且排序, 要么这个自定义的类实现Comparable接口,要么在TreeSet中传入Comparator.

                 c.LinkedHashSet

                           去重复, 保留存储顺序

                           HashSet的子类,同样使用哈希算法进行去重复.

 

.Map集合

常用方法:

         存储键值对

                   Vput(K key, V value)

         根据键获取值

                   Vget(Object key)

         获取键对象组成的Set

                   Set<K>keySet()

         获取键值对组成的Set

                   Set<Map.Entry<K,V>>entrySet()

         清空所有键值对

                   voidclear()

        判断是否为空集合

                 boolean isEmpty()

         判断是否包含指定的键对象

                 boolean containsKey(Object key)

        判断是否包含指定的值对象

                 boolean containsValue(Objectvalue)

        将另一个Map中的键值对全部添加到当前Map

                 void putAll(Map<? extends K,?extends V> m)

        根据键对象删除键值对,返回值对象

                 V remove(Object key)

        获取所有值对象组成的Collection集合

                 Collection<V> values()

         ***.集合的迭代

         *1.Collection:

                   迭代器:使用iterator()得到Iterator对象,调用hasNext()next()方法进行迭代.

                   增强for循环: JDK5之后,能用迭代器迭代的类都可以使用增强for循环,语法为: for (元素类型 变量名 : 容器) {循环体 }

         2.List

                   除了Collection2种通用迭代方法,还可以使用普通for循环,0循环到size()-1位置,每次调用get(int)方法获取一个元素

         3.Vector

                   除了以上3种方式,还可以使用Enumeration,通过elements()方法获得对象,调用hasMoreElements()方法和nextElement()方法进行迭代.

         *4.Map

                   keySet:调用keySet()方法获取一个由所有键对象组成的Set集合,迭代Set集合获取每一个键对象,再使用键对象获取值对象.

                   entrySet:调用entrySet()方法获取一个由所有Entry对象组成的Set集合,迭代Set集合获取每一个Entry对象,再通过Entry对象获取键和值.

                  

 

---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima
原创粉丝点击