java中的集合框架主要包含这三大块,我们所要掌握的主要是这三个接口及其实现类的使用方法;
首先要说的是Set List是从Collection继承而来,而Map则不是从它继承;
对于Collection接口,有以下从教材摘抄的内容:
Collection是集合框架中最根本的一个接口,它代表了各式各样的对象集合,
Collection接口中的方法分为以下几类:
(1)单元素的添加 、删除操作
- boolean add(Object o) 将对象添加给集合
- boolean remove(Object o) 如果集合中有与O相匹配的对象,则将其删除
(2)查询操作
- int size() 返回当前集合中元素的数量
- boolean isEmpty() 判断集合中是否含有任何元素
- boolean contains(Object o) 查找集合中是否含有对象o
- Iterator iterator() 返回一个迭代器,用来访问集合中的各个元素
- bool containsAll(Collection c) 查找集合中是否含有集合c中所有元素
- bool addAll(Collection c) 将结合c中所有元素添加给该集合
- void clear() 删除集合中所有元素
- void removeAll(Collection c) 从集合中删除c中所有元素
- void retainAll(Collection c) 从结合中删除c中不包含的元素
- Object [ ] toArray() 返回一个内含集合所有元素的array
注意:可以把集合转换为任何其他的对象数组,但是,不能直接把集合转换成基本数据类型的数组,因为集合必须持有对象。
Set:是一个集合,其内部不可以有重复的元素,
它是继承自Collection的接口,它关心唯一性,是没有重复项目的集合,Set中没有引入新方法,所以Set是一个Collection,只不过其行为有所不同。对于Set对象,
利用迭代器获取的元素的顺序是不确定的,Set是独一无二的Collection。
Set常用的实现类有HashSet和TreeSet。
这类有一个个人写的一个例子程序
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Set set=new HashSet();
set.add("a");
set.add("b");
set.add("c");
Iterator iter=set.iterator();
while(iter.hasNext()) System.out.println(iter.next());
//System.out.println(set);
}
}
List接口:列表 可以包含重复元素
List接口代表一种有序的集合,也是Collection的子接口,它关心的是索引,List对象可以包含重复元素,List可以从列表的头部或尾部开始搜索元素,
如果找到所搜索元素,还将报告元素所在的位置,其具体的实现类有ArrayList,Vector,LinkedList,附带有一个重要的集合框架中的实用类Arrays
List中新增的方法
- boolean addAll(int index ,Collection c) 将集合c的所有元素添加的集合index位置,原先位置及其后面的元素按次后移
- Object get(int index) 返回index位置的元素
- Object set(int index ,Object element) 用所给的对象element替换指定位置的元素,返回被替换的元素
- void add(int index,Object element) 在指定位置插入对象element,而原先位置及其后面的元素依次后移
- Object remove(int index)从List中删除指定位置的元素,原先位置及其后面的元素依次左移,返回被删除的元素
- int indexOf(Object o) 返回对象o在List中第一次出现的索引值,如果o 不是List的元素,返回-1
- int lastIndexOf(Object o)返回对象o在List中最后出现的索引值,如果o 不是List的元素,返回-1
- ListIterator listIterator() 按顺序返回List 中元素的一个列表迭代器
- ListIterator listIterator(int index) 按顺序返回List 中从index位置开始的元素的一个列表迭代器
- List subList(int formindex ,int toindex) 返回从formindex到toindex的元素组成的一个List
ArrayList:是一个可变长度的数组,实现了LIst接口,因此他可以包含重复元素和Null元素,也可以任意的访问和修改元素,由ArrayList类实现的List集合采用数组结构
保存对象,ArrayList类封装了一个动态再分配的Object [ ]数组,每一个ArrayList对象都有一个capacity,表示存储列表所有元素的数组的容量,当元素添加的ArrayList时他的
capacity在常量时间内自动增加
它有以下常用的方法:
- add()
- remove()
- Contains()
- ToArray() 这个方法把ArrayList的元素Copy到一个新的数组中
- ensureCapacity(int minCapacity) 将ArrayList对象容量增加minCapacity
- trimToSize() 整理ArrayList对象容量调整为列表当前大小
具体的方法可以参考Api文档,这里有个例子程序
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class ListDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Set set=new HashSet();
set.add("a");
set.add("b");
set.add("c");
List list=new ArrayList();
//list.addAll(set);
list.add("d");
list.add("e");
list.add("f");
// System.out.println(list);
// System.out.println(list.contains("a"));
// System.out.println(list.get(1));
// System.out.println(list.indexOf("f"));
// Iterator iter=list.iterator();
// System.out.println(iter.next());
// Object [] rt=list.toArray();
// for(int i=0;i<rt.length;i++)
// System.out.println(rt[i]);
// System.out.println(list.size());
// for(int i=0;i<list.size();i++)
// System.out.println(list.get(i));
}
}
Vector :向量,是直接继承AbstractList的一个类,是可增长的对象数组,用法与ArrayList非常相似,这里不做过多介绍
LinkedList:链表,它实现了List接口,允许null元素。内部实现是链表,适合于在链表中间需要频繁的进行插入和删除操作,用法与ArrayList也很相似
附带:Arrays
Arrays是集合框架中很实用的公用类,包含有一个方法,用于从特定的对象数组生成一个Collection对象,它还是java的一种用于处理数组的特殊的实用类,这个类
提供了对数组的填充、查找、比较、排序等一系列的对数组的操作
- java.util.Arrays.asList()方法返回一个List对象,它含有数组的元素,该数组是传递给此方法的,为快速构建Collection对象提供了一种方便的 机制
import java.util.*
public class Test{
public static void main(){
Collection cl=Arrays.asList(new String[ ]{"a" ,"b" "c"});
System.out.println(cl);
}
}
2.处理数组的静态使用方法
- Arrays.fill(type [ ] a,type val); 对数组进行填充,就是简单的把一个数组的全部或者某段数据填成一个特殊的值
- Arrays.binarySearch(type [ ] a,type val);就是在某类型的数组中用二分法查找特定的key的元素,返回元素索引值,前提是这个数组是经过排序的
- Arrays.equals(type [ ] a,type [ ] b);对两个数组进行比较,相等则返回true,否则false
- Arrays.sort(type [ ] a) ;对数组排序的
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class ArraysDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String [] a={"a","b","c"};
// List list=Arrays.asList(a);
// System.out.println(list);
// Collection cl=Arrays.asList(a);
// System.out.println(cl);
// Arrays.fill(a, "f");
// for(int i=0;i<a.length;i++)
// System.out.println(a[i]);
String [] s={"1","2","3"};
System.out.println(Arrays.equals(a, s));
}
}
Map接口:俗称映射,是一个保存了一组键值对应关系的对象,集合中不能包含重复的键,即一个键只能对应一个值,使用put(K key ,V value)方法时,如果key存在,则新的value会取代旧的value值、
其实现类有 HashMap、TreeMap:在Map 中插入、删除、定位元素,HashMap是最好的选择,HashMap通过hashcode对其内容进行查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果需要一个有序结果。就应该使用TreeMap(HashMap 中元素的排列顺序是不固定的)
Map 接口中常用的方法
添加、删除操作
- Object put(Object key ,Object value ):将互相关联的一个关键字和一个值放入该对象,如果该关键字已存在,那么与此关键字相关的新值将取代旧值,如果该关键字不存在,则返回null
- Object remove(Object key)从映像中删除与key相关的映射
- void putAll(Map t) 将来自特定映像的所有元素添加给该映像
- void clear()从映像中删除所有映射
- Object get(Object key) 获得与此关键字key相关的value
- boolean containsKey(Object key) 判断映像中是否存在关键字key
- boolean containsValue(Object value) 判断映像中是否存在值value
- int size() 返回当前映射的数量
- boolean isEmpty() 判断当前映射中是否含有任何映射
- Set keySet() 返回映射中所有关键字的视图集
- Collection values() 返回映射中所有值的视图集
- Set entrySet()返回整个映射的视图集
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class MapDemo {
/**
* @param args
*/
private int grade;
private String name;
MapDemo(){}
MapDemo(String name,int grade){
this.name=name;
this.grade=grade;
}
public static void printcl(Collection cl){
Iterator iter=cl.iterator();
while(iter.hasNext())
System.out.println(iter.next());
}
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap map=new HashMap();
map.put("li", new MapDemo("lisi",90));
map.put("zhang", new MapDemo("zhangsan",91));
map.put("wang", new MapDemo("wangwu",92));
// System.out.println(map);
Set set1=map.keySet();
// printcl(set1);
Iterator iter=set1.iterator();
while(iter.hasNext()){
// System.out.println(iter.next());
MapDemo mapdemo=(MapDemo)map.get(iter.next());
System.out.println(mapdemo.grade);
}
// System.out.println(set1);
// Set set2=map.entrySet();
// System.out.println(set2);
// Collection cl=map.values();
// System.out.println(cl);
}
}