JAVA—容器类

来源:互联网 发布:seo实战密码下载 编辑:程序博客网 时间:2024/05/17 04:40

一、基本概念

       Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中。
       有两个不同的接口:
       1. Collection:
           •Collection接口存储一组不唯一,无序的对象
           •List接口存储一组不唯一有序(插入顺序)的对象
           •Set接口存储一组唯一无序的对象
     
       2. Map:     
           •Map接口存储一组键值对象,提供keyvalue的映射
          一组成对的“键值对”对象,允许你使用键来查找值。
          
二、知识点梳理
1、Collection 和Collevtions 的区别
        java.util.Collection 是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法。
       CollectionJava提供的集合接口,存储一组不唯一,无序的对象。它有两个子接口List和Set
    java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

2、实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

  1)LinkedList类
  LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。•LinkedList采用链表存储方式。

      –优点:插入、删除元素时效率比较高  提供了一些便于操作的方法,如:addFirst、addLast、removeFirst、removeLast
      –缺点:遍历和随机访问元素效率低下
      注意:LinkedList没有同步方法。

  2) ArrayList类
  ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。

  3)Vector类
  Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的 Iterator是同一接口,但是,因为Vector是同步的,当一个 Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例 如,添加或删除了一些元素),这时调用Iterator的方法时将抛出 ConcurrentModificationException,因此必须捕获该 异常。

3、set接口
      1 ) HashSet类
    Java.util.HashSet类实现了Java.util.Set接口。
  -> 它不允许出现重复元素—唯一
  -> 不保证和政集合中元素的顺序—无序
  ->允许包含值为null的元素,但最多只能有一个null元素
       2)TreeSet
  TreeSet描述的是Set的一种变体——可以实现排序等功能的集合,它在讲对象元素添加到集合中时会自动按照某种比较规则将其插入到有序的对象序列中
4、Map集合接口

      1 ) Hashtable类 ——同步
    Hashtable继承Map接口,实现一个key-value映射的哈希表 不允许有空值。

      HashTable:如果key value值有的写为空的话,编译的时候不会报错,但是运行的时候,有null的不能添加成功。

      添加元素的时候key值不能重复,value值可以重复。HashTable是无序的。

      注: 要同时覆写equals方法和hashCode方法,而不要只写其中一个。

    2)HashMap类——非同步
 HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key,但是key只能有一个null,value值可以有多个。

-JDK1.0引入了第一个关联的集合类HashTable,它是线程安全的。 HashTable的所有方法都是同步的。
-JDK2.0引入了HashMap,它提供了一个不同步的基类和一个同步的包装器synchronizedMap。synchronizedMap被称为 有条件的线程安全类
-JDK5.0util.concurrent包中引入对Map线程安全的实现ConcurrentHashMap,比起synchronizedMap, 它提供了更高的灵活性。同时进行的读和写操作都可以并发地

5、集合和数组的区别
       —数组不是面向对象的,存在明显的缺陷。集合是面向对象的,以类的形式存在,有着封装、继承、多态三大特性,通过简单的方法和属性就可实现各种复杂操作,大大提高软件的开发效率。
      —数组能存放基本数据类型和对象,集合类容量动态改变。
     —数组无法判断数组中实际存在多少元素,length只告诉了数组的容量,而集合的.size()可以确切的知道元素的个数
      ................