Java集合总结

来源:互联网 发布:宁静知乎 编辑:程序博客网 时间:2024/05/01 20:31

 Java数组是一个Java对象,数组的长度是固定的,在同一个数组中只能够存放相同类型的数据,数组可以存放基本类型的数据,也可以存放引用类型的数据。在创建数组对象时,必须指定数组对象的长度,数组一旦创建,它的长度就不能再变

  (1)创建数组对象(即new一个数组时)要指定数组的长度,数组的长度一旦指定,就不能够再发生变化;

  (2)同一个数组中的数据的类型必须相同,可以是基本类型,也可以是引用类型。

----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

Java中的集合

  (1)集合可以存储和操纵数目不固定的一组数据

  (2)集合中的元素只能够是引用类型,不能够是基本类型

  (3)集合分为以下三种

          a. Set     不排序             不重复

          b. List     按索引位置排序  可以重复  允许按照对象在集合中的索引位置检索对象(这点类似于数组)

          c. Map    集合中的每一个元素包含一对键对象和值对象

                        集合中没有重复的键对象,值对象可以重复

   (4)Collection接口(注意引用的概念)

           a.Collection接口声明适用于Java集合(只有Set和List)的通用方法

              add()               向集合中加入一个对象的引用

              clear()             删除集合中所有的对象,即集合不再持有这些对象的引用

              contains()       判断集合中是否持有特定对象的引用

              isEmpty()        判断集合是否为空

              iterator()        返回一个Iterator类型的对象,通过这个对象可以遍历集合中所有的元素

              remove()         从集合中删除一个对象的引用

              size()               返回集合中元素的数目

              toArray()          返回一个数组,包含集合中的所有元素

            List 和 Set接口均继承Collection接口,这些类型的对象可以使用上述方法,但是不能对Map对象调用以上的方法。

 

  (5)Iterator接口

          a. Iterator接口隐藏底层集合的数据结构,提供遍历各种类型的集合的统一接口

          b. Iterator接口中声明了如下方法:

              hasNext()

              next()

              remove()

---------------------------------------------------------------------------------------------------------------------------------------------------

   1.Set

       (1)Set是最简单的一种集合,不排序,没有重复对象

       (2)Set是一个接口,它有两个实现类,HashSet和TreeSet

               a.HashSet类按照哈希算法来存取集合中的对象,存取速度比较快;

               b.HashSet有一个子类LinkedHashSet,不仅实现哈希算法,而且实现链表数据结构,提高插入和删除元素的性能;

               TreeSet类实现了SortedSet接口,具有排序功能

       (3)集合中存放的对象的引用

       (4)集合中的add方法   向集合中添加对象的引用时,首先判断这个对象是否已经存在于集合中了,集合的add方法通过调用对象的equals方法判断对象是否相同

        不管是HashSet还是TreeSet,实现的Set接口,它们的共性在于集合中没有重复的元素,集合不排序 

《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》

   1.1 HashSet

        (1)按照哈希算法存取集合中的对象,具有很好的存取和查找性能

        (2)当向集合中加入一个对象时,Hashset会调用对象的hashCode()方法获得哈希码,然后根据哈希码进一步计算对象在集合中的存放位置

        (3)在java.lang.Object中定义了hashCode()和equals()方法,在最原始的Object中定义的equals()方法是按照内存地址比较对象是否相等,因此对于Object而言,如果equals方法的结果为true,则说明两个引用实际上引用相同的对象,这两个引用的哈希码必然也相同

        为保证HashSet能够正常工作,要求两个对象用equals()方法比较的结果为true时,他们的哈希码也相同

        如果用户定义的类覆盖了Object的equals方法而没有覆盖hashCode方法,会导致当equals方法结果为true时,对象的哈希码并不相同,这样会使hashSet无法正常工作,用户本意是作为同一个对象引用处理,但是由于没有覆盖hashCode()方法,导致哈希码不同,hashSet将作为不同对象处理。

   1.2 TreeSet

         (1)TreeSet实现了SortedSet接口,能够对集合中的对象进行排序,当TreeSet向集合中加入一个对象时,会把它插入到有序的对象序列中,TreeSet支持两种排序方式:自然排序和客户化排序

           当TreeSet向集合中插入一个对象时,会自动进行排序:如何呢?调用对象的compartTo方法比较对象的大小,然后进行升序排序,所以对象必须实现Comparable接口,

         1.2.1 自然排序   

            a.java类库中有一部分类实现了Comparable接口,如Integer,Double和String,Comparable接口有一个compareTo(Object o)方法,返回整数类型;

            b.TreeSet调用对象的compareTo()方法比较集合中对象的大小,然后进行升序排列,这种排序方式成为自然排序

            c.使用自然排序时,必须向TreesSet集合中加入同类型的对象,并且这些对象的类必须实现了Comparable接口

            d.对于TreeSet中已经存在的对象,如果修改了他们的属性,TreeSet不会对集合进行重新排序

         1.2.2 客户化排序

            a.java.util.Comparator<Type>接口提供集体的排序方式,<Type>指定能够被比较的对象的类型,用这种方式,首先定义一个类实现java.util.Comparator<Type>接口,然后在类的定义中实现Compare方法,在创建TreeSet对象时,将java.util.Comparator<Type>类型的对象作为参数传入TreeSet的构造器中。这样TreeSet在向集合中插入对象时,会自动调用compareTo方法

==================================================================================

  2.List

     List的主要特征是其元素以现行方式存储,集合中允许存放重复对象

     2.1 List的实现类包括

            ArrayList  

             a. 代表长度可变的数组;

             b. 既然是数组,允许对元素进行快速的随机访问;

             c. 向ArrayList中插入和删除元素的速度较慢

            LinkedList  

             a.在实现中采用链表数据结构

             b.向List中插入和删除元素的速度较快

             c.随机访问的速度相对较慢,随机访问的含义是根据索引定位特定位置的元素

             d.提供addFirst(0 addLast() getFirst() get拉斯特() removeFirst()和removeLast()方法,使LinkedList可以作为堆栈,队列和双向队列使用

     2.2 对List中元素的访问

            采用ArrayList实现可以直接通过索引访问指定位置的List元素

     2.3 列表排序

            List只提供按照索引位置进行排序,如果希望对List中的对象按其他特定方式进行排序,可以借助于Comparator接口和Collections类,Collections类是Java类库的的辅助类,提供操纵集合的各种静态方法,其中sort()方法用于对List中的对象进行排序

            sort(List list) 对List进行自然排序

            sort(List list,Comparator comparator)根据Comparator实现类的compare方法对List进行客户化排序

     2.4 ListIterator接口

           List的listIterator()方法返回一个ListIterator对象,ListIterator接口继承Iterator,hasNext() next()

           add() hasPrevious(0   previous()

    2.5获得指定长度的List对象

         java.util.Arrays工具类提供asList()方法,将一个Java数组包装成一个List对象

    2.6  Java数组    随机访问速度快 

           ArrayList   随机访问快

           LinkedList  最快的插入和删除

==================================================================================

  3.Map

     3.1 一种把键对象和值对象进行映射的集合

     3.2map是一种集合,他的每一个元素都是一个映射,包含一个键对象和一个值对象

     3.3

         a.向Map中插入元素时,必须提供一对键对象和值对象

         b.从map集合中检索时,只要给出键对象,就会返回对应的值对象

     3.4Map中的键值不能够重复,但是值可以重复

     3.5 Map中的方法

           put()

           get()

           entrySet()  返回一个集合,存放Map.Entry类型的元素,每个Map.Entry对象代表Map中的一对键和值

     3.6 Map的两种实现

           a HashMap

               a.1 根据哈希码存取元素,存取速度比较快

               a.2 equals()和hashCode()方法要一致

           b.TreeMap

               使用TreeMap向集合中插入元素时,会进行排序,支持自然排序和客户化排序两种方式

 

==================================================================================

集合的工具类 Collections

          1.提供一系列用于操纵java集合的静态方法,它的一部分方法专门用于操纵List类型集合,还有一部分可用于操纵所有的Collection类型或Map类型集合

          2.List实际是长度可变的数组(随机访问非常方便)

          Collections中适用于List类型的方法

             copy(List dest,List src);

             fill(List list,Object o);

             sort(List list)对list进行自然排序

             binarySearch(List list,Object)

          Collections中的以下方法适用于Collection类型或者Map类型集合

            Object max(Collection coll)

            Object max(Collection coll,Comparator comp)

            Object min(Collection coll)

            Object min(Collection coll,Comparator comp)

             返回不可改变的集合,它只包含一个参数指定的对象,集合中仅包含一个元素,且集合不可以改变,因为集合不可以被修改,所以不用采用同步措施,提高并发性能

             Set singletonSet(Object o)

             List singletonList(Object o)

             Map singletonMap(Object key,Object value)

              在原来集合的基础上,返回线程安全的集合对象,在多线程环境下,不允许一个线程对集合进行排序,另一个线程对集合进行修改

              Collection synchronizedCollection(Collection c)

              List synchronizedList(List list)

              Map synchronizedMap(Map map)

              Set synchronizedSet(Set set)         

             在原来集合的基础上,返回不允许修改的集合视图 ,集合的元素不允许被修改,生成原始的集合视图,线程访问这个集合视图,不需要采用同步措施,因为视图时不可以被修改的,相当于是不可变类,总是线程安全的,程序可以读取视图的内容,但是不能够修改它

             Collection unmodifiedCollection(Collection c)

              List unmodifiedList(List list)

              Map unmodifiedMap(Map map)

              Set unmodifiedSet(Set s)

 

    对于不可变类无需设置线程同步,因为线程不会修改共享数据,所以不会造成修改操作数的情况。

 

 

 

 

 


 

 

http://blog.csdn.net/JBuilder3/archive/2010/05/28/5630846.aspx

 

原创粉丝点击