在存储信息时如果使用数组,那么必需要给出一个固定的长度,且存储空间不一定全部使用,且插入、删除操作数据时效率低下,而集合可适用于多种不同的存储方式及数据类型。

Java集合框架包含的主要内容及彼此之间的关系

Java 集合框架提供了性能优良、使用方便的接口和类,它们都位于java.util包中

Collection接口

1
2
3
Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素, 
Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。
Collection 接口存储一组不唯一,无序的对象。

List接口

List接口常用类有ArrayList和LinkedList 存储一组有序可重复且可容纳所有类型对象,包括null的值

1
2
1.ArrayList 存储存储多个有序的数据,遍历元素和访问元素的效率高。
2.LinkedList 采用链表存储方式,插入,删除元素的效率高。(可用作堆栈和队列)

Set接口

Set接口继承Collection接口存储一组唯一不允许重复,无序的对象。

Map接口

Map接口用于处理键值映射数据,每个元素都由一个键对象和值对象组成

1
2
1.Hashtable 继承自Dictionary类,是一个线程安全,不予许出现null值的类。
2.HashMap 实现了Map接口,是一个非线程安全,键值允许出现null值的类。

ArrayList和Linkendlist的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//ArrayList声明方式
List list=new ArrayList();
ArrayList al=new ArrayList();
//Arraylist的添加,删除数据方式
list.add(...);
list.remove(int index/Object o);
//获取数组长度及数据
list.size();
list.get(int index);
//判断是否存在元素
list.contains(Object o);

//LinkendList声明
List list=new LinkedList(();
LinkedList li=new LinkedList();
//添加方式可指定头部和尾部的添加
list.addFirst(Object o);
list.addLast(Object o);
//删除也可指定头部或尾部
list.removeFirst();
list.removeLast();

HashMap的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//声明方式
Map map=new HashMap();
//添加数据
map.put(Object key,Object value);
//根据键返回值 不存在返回null
map.get(Object key);
//删除元素
map.remove(Object key);
//返回键或值或者键值对的集合
map.key();
map.values();
map;
//判断元素是否存在
map.containsKey(Objet key);
//判断集合是否存在
map.isEmpty();
//清空所有元素
map.clear();

迭代器 Iterator

Iterator为集合而生,用于实现集合的遍历,它隐藏了各种集合实现类的内部细节,提供了遍历集合的统一编程接口。

Collection 接口的Iterator()方法返回一个iterator,然后通过iterator接口的两个方法可实现遍历。

1
2
1. hasNext(); 判断是否存在另一个可访问的元素。
2. next(); 返回要访问的下一个元素。
1
2
3
4
5
6
7
8
9
10
11
12
//遍历ArrayList集合
Iterator its=对象.iterator();
while(its.hasNext()){
对象类型 对象名=(对象类型)its.next();
//根据存储对象进行类型转换 然后通过对象名进行取值}

//遍历HashMap集合
Set keys=集合名.keySet();//取出key的集合
Iterator it=keys.iterator();
while(it.hasNext()){
String key=(key类型)it.next();//取出key
集合对象类型 对象名=(集合对象类型)集合名.get(key);//根据key取出对应的值//通过对象名拿出 values}

Java泛型集合

使用泛型集合在创建对象时指定集合中元素的类型,从集合中取出元素时无须进行类型强制转换,如果把非指定类型存入会出现编译错误,保证了数据的安全性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//泛型集合的声明
List<T> list=new ArrayList<T>();
Map<K,V> map=new HashMap<K,V>();

//使用加强版的for进行遍历//List泛型集合for(T item:list){
//直接用 item进行取值 无须类型转换!}

//Map泛型集合
Set<T> keys=map.keySet();
Iterator<T> it=keys.iterator();
while(it.hasNext()){
T key=it.next();
T va=map.get(key);
}
//根据键和集合存储的值类型进行接收取出的键值 无须进行类型转换------------------------------------------------------------------

//利用加强版的for 取出键值对for(Map.Entry<K,V> en : map.entrySet()){
en.getKey();
en.getValue().属性;
}

Java8特性

List转map