java集合框架讲解

java集合框架

一、java集合框架概述

java集合类从1.0开始不断完善,其中使用了丰富的数据结构(数组,队列,栈,链表,二叉树,哈希表等),主要有list,set,map三大接口及其子类实现,为我们提供了丰富的适应于不同场景的工具类。
在实际的开发中我们会遇到很多种需求场景,只有充分理解java集合框架下面的类的特点,具体场景需要使用什么集合类才会游刃有余。
                                          

二、List集合

     list集合有一些共性方法增删改查。
     集合的遍历有iterator和listiterator方法。其中后者是前者的子接口。
    在使用iterator迭代时,不可以通过结合对象的方法操作集合中的元素,否则会发生concurrentModificationException异常。在迭代时只能使用迭代器的方法。
     iterator:判断、取出、删除
     listiterator: 添加、修改、判断、取出、删除。

Collection:
  ---- List:元素是有序的,元素可以重复,因为该集合有索引。判断元素是否相同用equals()方法.
            -----ArrayList(动态数组 ):数据结构为数组,查询速度快,增删慢,线程不同步。
默认有10个元素,扩大50%的增加。
            -----LinkedList(链表、队列、堆栈):数据结构为链表,查询速度慢,增删快。
                                   特有方法:1)、addFirst(),addLast(), 
                                                     2)、getFirst(),getLast(),获取元素但是不删除. 果集合中没有元素,会产生
                                                     NoSuchElementException。
                                                     3)、 removeFirst(),removeLast(),获取元素并删除,如果集合中没有元素,会产生
                                                     NoSuchElementException。
                                    jdk1.6替代方法:offerFirst(),offerLast()
                                                                peekFirst(),peekLast()获取元素不删除。如果集合中没有元素,会返回null.
                                                                pollFirst(),pollLast().获取元素并删除。如 果集合中没有元素,会返回null.
                                                     

            -----Vector:数据结构为数组,线程同步,被ArrayList替代。(特有枚举(名字过长)、addElement等)
容量需要扩大时,成倍增加.
  ---- Set:元素是无序的,元素不可以重复。存入和取出时的顺序不一定一致。(set底层使用了Map集合)
                    -----HashSet:数据结构是哈希表,线程不同步。
                                  通过hashCode()和equals()方法判断元素是否相同和删除操作.
                                   如果元素的HashCode相同,会继续判断equals是否为true。如果元素的HashCode值不同,不 会调用equals方法.
           -----TreeSet:数据结构是二叉树,可以对集合中的元素进行排序。
                                  通过compareTo()方法判断元素唯一性,compareTo方法返回0.
                                  排序方法:1)元素自身实现comparable接口,或者实现一个comparator构造器。
                                   2)当comparable和comparator都存在时,以comparator为主。

三、Map集合:该集合存储键值对,必须保证键的唯一性。
                1.添加2.删除clear,3.判断containsValue,containsKey,isEmpty4.获取get,size,values,entrySet,keySet.
                 添加元素如果出现相同的键,返回原来的值,并覆盖。
Map集合两种取出方式:
                 1):keySet 将集合中的key取出。
 2)entrySet。Set<Map.Entry<K,V>>将Map集合中的映射关系存入到set集合中。
-----HashTable:数据结构是哈希表,不可以存入null键和null值。线程同步。(被HashMap替代)
  -----HashMap:数据结构是哈希表,可以存入null键和null值,线程不同步。
                         通过hashCode和equals方法判断相同
  -----HashSet:数据结构是二叉树,不同步,可以给键排序。
通过conparable和comparator比较。

四、线程安全类
在集合框架汇总,有些类是线程安全的,这些都是在JDK1.1中出现的。JDK1.2之后,出现了很多非线程安全类
  -------Vector:比ArrayList多了线程安全
-------Stack:堆栈   
-------HashTable:比HashMap多了线程安全
-------Enumeration:枚举,相当于迭代器。



你可能感兴趣的:(java,集合,list,map,迭代器)