概念
集合框架:是为表示和操作集合而规定的一种统一的、标准的体系结构。
任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
–接口:即表示集合的抽象数据类型。接口提供了让我们对集合中所表示的内容进行单独操作的可能。
–实现:也就是集合框架中接口的具体实现。实际它们就是那些可复用的数据结构。
–算法:在一个实现了某个集合框架中的接口的对象上,完成某种有用的计算的方法,例如查找、排序等。
集合框架内容
接口主要是Collection,Map,List,Set
具体类:ArrayList, LinkedList, HashSet, TreeSet, HashMap
算法:Collections
特点
Collection:存储一组不唯一,无序的对象, 唯一就是指的是不允许重复
List:存储一组不唯一,有序的对象, 不唯一指的是可以有重复的value,但是可能放在不同的位置
Set:存储一组唯一,无序的对象
Map:存储一组键值对对象,提供Key和value的映射
注意,他们的操作都是对象哦,int这种不同类型可不行,还有一个就是集合具有唯一性!
List接口实现
这里介绍下ArrayList,它实现了一个可边长的数组,在内存中分配连续的内存,遍历元素和随机访问元素比较高
存储方式如下图所示,有固定的内存位置,每个位置存放一个Object,内容可以重复!
相关操作方法
写一个简单的例子来看下如何使用ArryList:
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.HashMap;
public class Test{
public static void main(String args []){
ArrayList<String> arrylist = new ArrayList<String>();
arrylist.add("abc");
arrylist.add("efg");
arrylist.add("hjk");
int len = arrylist.size();
System.out.println("arrylist len = " + len);
for(int i = 0; i < arrylist.size(); i++){
System.out.println(arrylist.get(i));
}
}
}
在Code中声明了一个ArrayList用于存放String,然后使用add方法,加入了3个String,然后通过size方法获取arraylist中的存储的String个数,然后每个都打印出来,结果如下:
arrylist len = 3
abc
efg
hjk
如何遍历ArrayList,从上面的代码中看,我们使用了一个for循环,使用get方法来获取ArrayList中的每一个元素,这是一种最简单的方法,还有一种方法Iterate迭代器,先看下如何使用迭代器来遍历ArrayList
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.HashMap;
public class Test{
public static void main(String args []){
ArrayList<String> arrylist = new ArrayList<String>();
arrylist.add("abc");
arrylist.add("efg");
arrylist.add("hjk");
int len = arrylist.size();
System.out.println("arrylist len = " + len);
Iterator<String> it = arrylist.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
迭代器主要有2个方法,hasNext()和next(), 第一个是判断是否有下一个变量,如果有通过next方法取出来,运行的程序结果也是一样!
Set接口
Set类似于数学中的集合,数据不能重复,具有唯一性,直接看下代码,如何使用Set 和HashSet
import java.util.List;
import java.util.ArrayList;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.HashMap;
public class Test{
public static void main(String args []){
HashSet<String> hashset = new HashSet<String>();
Set<String> set = hashset;
set.add("abc");
set.add("efd");
set.add("gfs");
set.add("xyz");
set.add("efd");
int len = set.size();
System.out.println(len);
//set.clear();
set.remove("efd");
int j = set.size();
System.out.println(j);
Iterator<String> it = set.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
}
}
通过add方法增加对象,通过remove方法来移除对象,还有clear方法清空对象。这个必须使用迭代器来读取相关的对象。!
程序结果
4
3
abc
gfs
xyz
Map接口
这个接口就是一个映射的键值对,有一个Key还有Value,可以通过Key来查找到Value,所以Key是唯一的,Value可以有相同的方法,其中最常用的实现类是HashMap,Map常用的接口如下
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.HashMap;
public class Test{
public static void main(String args []){
HashMap<Integer,String> hashmap = new HashMap<Integer,String>();
Map<Integer,String> map = hashmap;
map.put(0,"abc");
map.put(1,"def");
map.put(2,"efd");
map.put(3,"gdc");
int len = map.size();
System.out.println(len);
System.out.println(map.get(3));
}
}
从代码看到使用put方法把键和键值存放到MAP中,可以通过size方法获取里面键值对的数量,然后通过get方法,可以根据键将此键保存的内容取出来。
程序结果
4
gdc