Java集合框架概要

Java Collection Framework:Java集合框架

在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架。

Javav程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创造出来一些对象,然后直接应用就可以了。大大提高了编程效率。


Java集合框架的基本接口/类层次结构:
注:[I]表示接口、[C]表示类
java.util.Collection [I]
+--java.util.List [I]
   +--java.util.ArrayList [C]
   +--java.util.LinkedList [C]
   +--java.util.Vector [C]
      +--java.util.Stack
+--java.util.Set [I]
   +--java.util.HashSet [C]
   +--java.util.SortedSet [I]
      +--java.util.TreeSet [C]
java.util.Map [I]
+--java.util.SortedMap [I]
   +--java.util.TreeMap [C]
+--java.util.Hashtable [C]
+--java.util.HashMap [C]
+--java.util.LinkedHashMap [C]
+--java.util.WeakHashMap [C]


对集合操作的工具类:

Java提供了java.Util.Collections和java.util.Arrays两个工具类简化了对集合的操作。

(注意:java.util.Collection是一个接口,是Java集合层次的根接口。java.util.Collections是一个对集合提供一些操作的工具类)

java.util.Collections提供了一些static方法用来操作或创建Collection,Map集合。

java.util.Arrays主要提供static方法来对数组进行操作。


线程安全的类:

Vector:比ArrayList多了线程同步机制。

Stack:堆栈类。

Hashtable:比HashMap多了线程安全。


Collection接口是所有集合接口的积累,提供了集合接口的通用操作。

定义如下:
public interface Collection<E> extends Iterable<E> {
 
// Basic operations
 
int size();
 
boolean isEmpty();
 
boolean contains(Object element);
 
boolean add(E element); //optional
 
boolean remove(Object element); //optional
 
Iterator<E> iterator();
 
 
// Bulk operations
 
boolean containsAll(Collection<?> c);
 
boolean addAll(Collection<? extends E> c); //optional
 
boolean removeAll(Collection<?> c); //optional
 
boolean retainAll(Collection<?> c); //optional
 
void clear(); //optional
 
 
// Array operations
 
Object[] toArray();
 
<T> T[] toArray(T[] a);
 
}


List是一个顺序的Collection(通常被称作序列)。通常也代表一个线性表的数据结构。List可以包含重复元素。List接口基本功能如下:
按位置访问—通过元素在list中的位置索引访问元素。
查询—获取某元素在list中的位置。
迭代—扩展了Iterator的接口能实现更多的功能,可以在链表中间添加元素。
List子集合—获取List某个位置范围内的子集合。
public interface List<E> extends Collection<E> {
 
// Positional access
 
E get(int index);
 
E set(int index, E element); //optional
 
boolean add(E element); //optional
 
void add(int index, E element); //optional
 
E remove(int index); //optional
 
boolean addAll(int index,
 
Collection<? extends E> c); //optional
 
 
// Search
 
int indexOf(Object o);
 
int lastIndexOf(Object o);
 
 
// Iteration
 
ListIterator<E> listIterator();
 
ListIterator<E> listIterator(int index);
 
 
// Range-view
 
List<E> subList(int from, int to);
 
}
Java提供了两个泛型的List的实现:LinkedList(链表)和ArrayList(数组列表)
ArrayList底层采用数组来保存每个集合元素。
LinkedList则是链式存储的线性表,本质是双向链表。我们可以把LinkedList当做栈来使用。

Set是一个不包含重复元素的无序集合(Collection)。Set接口中的函数都是从Collection继承而来。但限制了add的使用,使其不能添加重复元素。


Set接口声明如下:
public interface Set<E> extends Collection<E> {
 
// Basic operations
 
int size();
 
boolean isEmpty();
 
boolean contains(Object element);
 
boolean add(E element); //optional
 
boolean remove(Object element); //optional
 
Iterator<E> iterator();
 
 
// Bulk operations
 
boolean containsAll(Collection<?> c);
 
boolean addAll(Collection<? extends E> c); //optional
 
boolean removeAll(Collection<?> c); //optional
 
boolean retainAll(Collection<?> c); //optional
 
void clear(); //optional
 
 
// Array Operations
 
Object[] toArray();
 
<T> T[] toArray(T[] a);
 
}
Java中包含了三个通用的Set实现:HashSet,TreeSet和LinkedHashSet。
HashSet通过hash表存储集合元素。TreeSet的底层通过TreeMap的key来保存set集合的元素,而TreeMap采用红黑树(二叉排序树)来保存Map每个Entry。LinkedHashSet通过通过链表存储集合元素。


Map是Java提供的一个接口。Map是一种包含键值对的元素的集合。Map不能包含重复的键,并可以通过键实现对值得快速访问。

   
   
public interface Map<K,V> {
 
 
// Basic operations
 
V put(K key, V value);
 
V get(Object key);
 
V remove(Object key);
 
boolean containsKey(Object key);
 
boolean containsValue(Object value);
 
int size();
 
boolean isEmpty();
 
 
// Bulk operations
 
void putAll(Map<? extends K, ? extends V> m);
 
void clear();
 
 
// Collection Views
 
public Set<K> keySet();
 
public Collection<V> values();
 
public Set<Map.Entry<K,V>> entrySet();
 
 
// Interface for entrySet elements
 
public interface Entry {
 
K getKey();
 
V getValue();
 
V setValue(V value);
 
}
 
}
Java平台中提供了三种通用的Map实现:HashMap,TreeMap和LinkedHashMap。此外,哈希表也实现了Map接口。

Map不提供迭代器,而是提供3种方法,将Map对象的视图作为Collection对象返回。由于这些视图本身就是Collection,因此它们可以被迭代。
Set<KeyType> keySet()
Collection<ValueType> values()
Set<Map.Entry<KeyType,ValueType>> entrySet()
public interface Map<K,V> {
 
 
// Basic operations
 
V put(K key, V value);
 
V get(Object key);
 
V remove(Object key);
 
boolean containsKey(Object key);
 
boolean containsValue(Object value);
 
int size();
 
boolean isEmpty();
 
 
// Bulk operations
 
void putAll(Map<? extends K, ? extends V> m);
 
void clear();
 
 
// Collection Views
 
public Set<K> keySet();
 
public Collection<V> values();
 
public Set<Map.Entry<K,V>> entrySet();
 
 
// Interface for entrySet elements
 
public interface Entry {
 
K getKey();
 
V getValue();
 
V setValue(V value);
 
}
 
}

因为在Map中不能有重复的键,所以keySet和entrySet是Set对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值