集合框架:
集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:
- 接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象。
- 实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
- 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。
除了集合,该框架也定义了几个 Map 接口和类。Map 里存储的是键/值对。尽管 Map 不是集合,但是它们完全整合在集合中。
集合框架体系如图所示:
集合框架定义了一些接口:
Set 接口
集合是无序的
还有很多关于Set 的方法的调用,下面就举一个例子:
public static void main(String[] args) {
Set set = new HashSet();
set.add("1");
set.add("2");
set.add("3");
set.add("我爱你");
set.add("4");
set.add("5");
set.add("6");
// 输出集合的长度
System.out.println(set.size());
// 迭代器 循环遍历
Iterator iter = set.iterator();
while (iter.hasNext()){
System.out.println(iter.next());
}
}
结果是:
从结果中可以看出集合是无序的。
List 接口
集合是有序的
实例:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
//list 集合
public class ListDemo {
public static void main(String[] args) {
List list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("我爱你");
list.add("5");
list.add("6");
list.add("7");
//输出集合的长度
System.out.println(list.size());
// 输出下标为4的元素的值
System.out.println(list.get(4));
// 判断集合中有没有这个值
System.out.println(list.contains("5"));
// 判断集合是否为空
System.out.println(list.isEmpty());
// 输出最后数值为5的下标
System.out.println(list.lastIndexOf("7"));
// 判断是否与集合相等
System.out.println(list.equals(list));
// 清除集合中的元素
list.clear();
LinkedList list1 = new LinkedList();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("4");
list1.add("我爱你");
list1.add("5");
list1.add("6");
list1.add("7");
// 添加到第一个数
list1.addFirst("我想你");
// 添加到最后一个数
list1.addLast("再见");
// 把集合作为一个元素添加
list1.add(list1);
// 把集合中的元素添加进去
list1.add(list1);
Iterator iter = list.iterator();
while (iter.hasNext()){
System.out.println(iter.next());
}
}
结果是:
Map 接口
public static void main(String[] args) {
Map map = new HashMap();
map.put(1,"大王叫我来巡山");
map.put(2,"我把车子开上五环");
map.put(3,"你比四环多一环");
map.put(4,"清风徐来");
map.put(5,"水波不兴");
System.out.println(map.get(5));
Set set = map.keySet();
Collection collection = map.values();
Set set1 = map.entrySet();
Iterator iter = set1.iterator();
while (iter.hasNext()){
System.out.println(iter.next());
}
}
结果是:
Collections 类是Collection接口的辅助类,用来操作集合的,方法都是静态的。
Arrays 类用来操作数组的,其方法也是静态的。
将数组转换为集合:
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class ArrayDemo {
public static void main(String[] args) {
String [] str = new String[6];
for (int i = 0; i < str.length ; i++) {
str[i] = "苏鸡儿"+(i+1);
}
//将数组转换为集合
List list = Arrays.asList(str);
Iterator iter = list.iterator();
while (iter.hasNext()){
System.out.println(iter.next());
}
}
}
结果是:
将集合转换为数组:
import java.util.HashSet;
import java.util.Set;
public class Demo2 {
public static void main(String[] args) {
Set set = new HashSet();
set.add("清风徐来");
set.add("水波不兴");
set.add("人面桃花");
set.add("倾国倾城");
set.add("哪有分生");
String [] str = new String[5];
//将集合转换为数组
set.toArray(str);
for (String s : str) {
System.out.println(s);
}
}
}
结果是:
总结:
- 集合框架(JCF)的根接口为Collection,有Set、List等子接口,所有集合类均具有一些共同的方法,它们的主要区别在于实现的数据结构不同
- Map接口用于存储映射关系,其实现类有HashMap和TreeMap等
- Iterator迭代器能不暴露内部细节的情况下访问集合元素
- Collections类对集合框架提供了支持
- Arrays类提供了对数组的操作支持,同时提供了数组到集合的转化方法asList( )