A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余银桂 中级黑马   /  2012-6-13 18:15  /  2419 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java集合体系:
-----| Iterable  接口
       Itertaotr iterator()
--------| Collection  接口  所有集合的父类
       add()   remove()   clear()
-------------| List   有序,可以重复
       listIterator()  get(index)  remove(index)
----------------| ArrayList    使用数组实现,默认是10,增长0.5倍,操作慢,查询快
----------------| Vector       线程安全的ArrayList
       element()  elementAt()  elements()
----------------| LinkedList   链表实现,操作快,查询慢  , 数据结构:栈、队列
-------------| Set    无序,不可以重复
----------------| HashSet      哈希表,对象的哈希码,hashCode且equals同时相等元素重复。  线程不安全
----------------| TreeSet      红黑树,默认使用自然排序,线程不安全。
                               实现Comparable接口, compareTo(Object o)  集合的元素实现
          实现Compatrator接口,compare(Object o1. Object o2)  直接传递给集合
-----| Iterator
     hasNext()  next()  remove()
--------| ListIterator
     hasPrevious()  previous()  set()  add()
-----| Comparable
     compareTo()
-----| Comparator
     compare()
  equals()
-----| Map  用于存储关联对象的集合容器
     put(K,V) remove(K)  get(K)  keySet()  values()  Set<Map.Entry<K,V>> entrySet()
---------| HashMap  哈希表实现,hashCode且equals同时相等元素重复(Key)
---------| TreeMap  红黑树实现,对Key对象进行排序,默认自然排序。
        实现Comparable接口, compareTo(Object o)  集合的元素实现
     实现Compatrator接口,compare(Object o1. Object o2)  直接传递给集合
java.util.*
-----| Collections  封装了操作集合的常见算法,提供的全部是静态方法,所以称之为集合的工具类。
       sort(List<T> list)
    static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
    static void reverse(List<?> list)
    max(Collection<? extends T> coll)
    fill(List<? super T> list, T obj)
    synchronizedCollection(Collection<T> c)   将线程不安全的集合转换为线程安全的
-----| Arrays       主要封装了操作数组的常见算法,帮助开发人员快速、高效的操作数组。
       static <T> List<T> asList(T... a)

Set集合的实现类,如 HashSet底层采用HashMap实现,元素存储在Map的Key上,Value默认为null。
                  如 TreeSet底层采用TreeMap实现,元素存储在Map的Key上,Value默认为null。

Generic:
   1. 集合中泛型应用
          使用泛型的时候左右两边泛型的类型必须一致。当然可以一边有一般没有但是不推荐。
   2. 泛型的自定义和继承
          静态函数不能使用类上的泛型声明,必须单独的声明。
   3. 泛型的通配符及其限制
          ?  所有的类型  Collection<?> =  Collection<String>
          ? extends Number    String  Integer
           ?  super  Integer    Number
    一个类是自己本身子类或父类。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
在使用Java的时候,我们都会遇到使用集合(Collection)的时候,但是Java API提供了多种集合的实现。

总的说来,Java API中所用的集合类,都是实现了Collection接口,他的一个类继承结构如下:

                  Collection<--List<--Vector
                  Collection<--List<--ArrayList
                  Collection<--List<--LinkedList
                  Collection<--Set<--HashSet
                  Collection<--Set<--HashSet<--LinkedHashSet
                  Collection<--Set<--SortedSet<--TreeSet

Vector : 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用,它不可能不受Array的限制。性能也就不可能超越Array。所以,在可能的情况下,我们要多运用Array。另外很重要的一点就是Vector        :sychronized”的,这个也是Vector和ArrayList的唯一的区别。

ArrayList:同Vector一样是一个基于Array上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。

LinkedList:LinkedList不同于前面两种List,它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势。

List总结:

1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ];

2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];

3. 所有的List中可以有null元素,例如[ tom,null,1 ];

4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。

HashSet:虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。看看HashSet的add(Object  obj)方法的实现就可以一目了然了。
    public boolean add(Object obj)
    {
        return map.put(obj, PRESENT) == null;
    }

这个也是为什么在Set中不能像在List中一样有重复的项的根本原因,因为HashMap的key是不能有重复的。

LinkedHashSet:HashSet的一个子类,一个链表。

TreeSet:SortedSet的子类,它不同于HashSet的根本就是TreeSet是有序的。它是通过SortedMap来实现的。

Set总结:

1. Set实现的基础是Map(HashMap);

2.  Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象

为什么要使用集合类 ?

当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。

回复 使用道具 举报
哎,集合学了忘 忘了再学!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马