你的位置:首页 > 软件开发 > Java > Java Collection Framework概述

Java Collection Framework概述

发布时间:2016-03-28 13:00:07
文章出自:听云博客Collection概述Java collection是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator、Arrays和Collec ...

Java Collection Framework概述

文章出自:听云博客

Collection概述

Java collection是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。

Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator、Arrays和Collections)。

Java collection 结构图

Java Collection Framework概述 

通过上图我们可以看出

  • Collection是一个interface 

Collection有List和Set两大分支。

List<E>是一个队列,根据下标索引,第一个元素的下标是0,List的实现类有LinkedList, ArrayList, Vector, Stack。List是有序的队列,List中可以有重复的值。

Set<E>是一个集合,SET中的值是唯一的,我们经常会遇到List去重的问题,把List转为SET就可以快速实现 Set的实现类有HastSet和TreeSet。HashSet。其中TreeSet是有序的。

  • Ma<K,V>是一个interface,即key-value键值对。Map中的每一个元素包含“一个key”和“key对应的value”。 

AbstractMap是个抽象类,它实现了Map接口中的大部分API。而HashMap,TreeMap,WeakHashMap都是继承于AbstractMap。

  • Iterator。它是遍历集合的工具,我们经常使用Iterator迭代器来遍历集合。Collection的实现类都要实现iterator()函数,返回一个Iterator对象。

  • 抽象类AbstractCollection、AbstractList、AbstractSet、AbstractMap是抽象类,他们都实现了各自的大部分方法,我们直接继承Abstract类就可以省去重复编码相同的方法 。PS当时来面试的时候被问到这个问题竟然一下没想起来。

List简介

1、List 是一个接口,它继承于Collection的接口。它代表着有序的队列。

2、AbstractList 是一个抽象类,它继承于AbstractCollection。AbstractList实现List接口中除size()、get(int location)之外的函数。

3、AbstractSequentialList 是一个抽象类,它继承于AbstractList。AbstractSequentialList 实现了“链表中,根据index索引值操作链表的全部函数”。 

4、ArrayList, LinkedList, Vector, Stack是List的4个实现类。

ArrayList 是一个数组队列。它由数组实现,实现了RandomAccess, Cloneable, java.io.Serializable接口,所以可以随便访问,克隆,序列化,随机访问效率高,随机插入、随机删除效率低。

LinkedList 是一个双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList随机访问效率低,但随机插入、随机删除效率低。

Vector 是矢量队列,和ArrayList一样,它也是一个动态数组,由数组实现。但是ArrayList是非线程安全的,而Vector是线程安全的。

Stack 是栈,继承于Vector。栈的特点是:先进后出(First In Last Out)。

List和Vector不同,ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用ArrayList,而在多线程中可以选择Vector或者CopyOnWriteArrayList。

List的使用

1、如果涉及到“栈”、“队列”、“链表”等操作,应该考虑用List,具体的选择哪个List,根据下面的标准来取舍。

2、对于需要快速插入,删除元素,应该使用LinkedList。

3、对于需要快速随机访问元素,应该使用ArrayList。

4、对于“单线程环境” 或者 “多线程环境,但List仅仅只会被单个线程操作”,此时应该使用非同步的类(如ArrayList)。

5、对于“多线程环境,且List可能同时被多个线程操作”,此时,应该使用同步的类(如Vector)。

Fail-Fast

fail-fast 机制是java集合(Collection)中的一种错误机制。当一个线程遍历某集合时,这个集合的值被其它线程改变,该线程就会抛出ConcurrentModificationException异常。

fail-fast示例。

package Test;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class FastFailEX {  private static List<Integer> list = new ArrayList<Integer>();    public static void main(String[] args) {      //使用两个线程操作list    new ThreadA().start();    new ThreadB().start();  }   private static void print() {    System.out.println("");    Integer value = null;    Iterator<Integer> iter = list.iterator();    while(iter.hasNext()) {      value = (Integer)iter.next();      System.out.print(value+", ");    }  }  //向list添加元素  private static class ThreadA extends Thread {    public void run() {      for(int i=0;i<10;i++){         list.add(i);         print();      }    }  }  //向list添加元素  private static class ThreadB extends Thread {    public void run() {      for(int i=10;i<20;i++){        list.add(i);        print();      }    }  }}

原标题:Java Collection Framework概述

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。