集合的由来
处理多个相同数据我们采用数组,但数组空间固定不能动态增长,插入或删除元素比较麻烦。我们使用集合来解决这个问题。
集合特点:元素类型可以不同、集合长度可变、空间不固定。
Java中对一些数据结构和算法进行了封装即集合。集合也是一种对象,用于存储、检索、和传输对象。
JCF(Java Collections Framework)集合框架。它提供了用于管理集合的接口和类。
在集合框架中,分为两种API:
1、装载数据的集合类
2、操作集合的工具类
集合(Collection)接口位于Set接口和List接口的最顶层,是Set接口和List接口的父接口。定义了Collection对象共有的一些基本方法,这些方法分为基本操作、批量操作和数组操作。
Iterator接口是一种用于遍历集合的接口。所谓遍历,是指从集合中取出每一个元素的过程。
集合(Collection)接口分为三大类:
List接口:一列数据,数据内容可以重复,以元素安插的次序来放置元素,不会重新排列。
Set接口:一列数据,数据内容不能重复,使用自己内部的一个排列机制放置元素。
Map接口:一列数据对,使用自己内部的一个排列机制放置元素
集合的选用:
(一)操作一列数据,而且数据有重复时选择List接口的实现类。
List接口的实现类具有共同的方法:
add() —— 向集合中添加元素(增)
remove() – 将元素从集合中移除(删)
get() —— 从集合中获取元素(查)
set() —— 修改集合中的元素(改)
size() —— 查看集合长度
List接口的实现类的选择
ArrayList:使用最广泛,集合元素增加或删除操作不频繁时使用。最适合查询。
LinkedList:当需要在集合的中间位置,频繁增加或删除元素时使用。
Vector:与ArrayList类似,但Vector是线程安全的,所以性能要低于ArrayList
LinkedList>ArrayList>Vector
泛型与foreach循环
泛型:
由于集合中保存的元素都是Object类型,当一个元素从集合中取出来后都是Object类型的对象,所以我们必须对其进行强制类型转换。为了解决这种麻烦,JDK1.5中提供了一种新的处理方式泛型。
如:List list = new ArrayList();
for each:
在JDK1.5中增加了一种新型的循环,称之为for each循环,该循环大大简化了对于集合的遍历操作。
如:
for(String a : list){
System.out.println(a);
}
(二)操作一列数据,而且数据无重复时选择Set接口的实现类。
Set接口的实现类具有共同的方法:
add() —— 向集合中添加元素(增)
remove(Object o) – 将元素从集合中移除(删)
size() —— 查看集合长度
set接口实现类的选择
HashSet:速度快,不排序。
TreeSet:速度慢,排序。
Map接口
Map接口不是Collection接口的继承。Map接口用于维护键/值对(key/value pairs)。每个条目包括单独的两部分 :
key
Value
在Map中不允许出现重复的键.
key 和 value 可以是任何类的实例
Map接口的实现类的共同方法
Map接口的实现类都是关于键值对的操作,它们拥有一些共性的方法:
put() 将键值对存入集合
get() 根据键取出元素的值
keySet()
将Map中的所有键取出形成一个Set
values()
将Map中的所有值取出形成一个Collection
remove() 根据键移除值
Java集合框架中提供了一个操作Set、List和Map等集合的工具类Collections,该工具类中提供了大量方法,用于对集合元素进行排序、查询、修改等操作。
工具类Collections和Arrays
Java集合框架同时也提供了Arrays类用于操作数组。Arrays类包含用来操作数组(比如排序和搜索)的各种方法。