---------------------------------------------android培训、java培训、期待与您交流! ----------------------
数组是一个存放相同(或可兼容)类型数据的一个容器,但数组的特性是:大小固定,不能改变。
这样在创建时必须指明长度,因此在应用时会存在一定的限制。
如果事先不知道要存放数据的个数,或者需要一种比数组下标存取机制更灵活的方法时,此时就需要用到集合类。
注:虚线框为借口,实线框为集合
----------------------------------------------------------------------------------------------------------------------
List:元素有序,可重复,集合体系有索引
Set:元素无序,不可重复
Map:存储的是键值对
集合最大的特点:长度不固定;集合中必须存取对象
是集合都有如下特点:
(1)单元素添加、删除操作:
boolean add(Object obj):将对象添加给集合
boolean remove(Object obj): 如果集合中有与obj相匹配的对象,则删除对象obj
(2)查询操作:
int size() :返回当前集合中元素的数量
boolean isEmpty() :判断集合中是否有任何元素
boolean contains(Object obj) :查找集合中是否含有对象obj
Iterator iterator() :返回一个迭代器,用来访问集合中的各个元素
(3)组操作:作用于元素组或整个集合
boolean containsAll(Collection c): 查找集合中是否含有集合c 中所有元素
boolean addAll(Collection c):将集合c 中所有元素添加给该集合
void clear(): 删除集合中所有元素
void removeAll(Collection c):从集合中删除集合c 中的所有元素
void retainAll(Collection c):从集合中删除集合c 中不包含的元素
(4)Collection转换为Object数组 :
Object[] toArray():返回一个内含集合所有元素的数组
Object[] toArray(Object[] a): 返回一个内含集合所有元素的数组。返回的数组和参
数a的类型相同
例如:
import java.util.*;
public class CollectionTest {
public static void main (String[] args) {
Collection c = new ArrayList(); //利用多态创建一个ArrayList对象,
c.add ("hello"); // 可以放入不同类型的对象 ,因为未指定要存入的数据类型
c.add (new Boolean(true));
c.add (new Integer(100));
System.out.println ("size" + c.size() + ": " + c); //获得集合的尺寸
System.out.println ("contains: " + c.contains(new Integer(100))); //判断集合是否存在指 //定元素
System.out.println (c.remove(new Boolean(true))); //移除指定元素
System.out.println ("isEmpty: " + c.isEmpty()); //判断集合是否为空
System.out.println("size" + c.size() + ": " + c); //获得删除元素后集合的大小
}
}
----------------------------------------------------------------------------------------------------------------------
要想取出集合中的元素,需要迭代器Iterator进行迭代,迭代前需要判断是否存在下一个元素方法如下:boolean hasNext():判断是否存在另一个可访问的元素
Object next():返回访问的下一个元素,如果到达结尾,则抛出 NoSuchElementException异常
Void remove():删除上次访问返回的对象;谨慎操作,需集合迭代完毕!否则 抛出ConcurrentModificationExceptiom异常并立即失败。
例如:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorTest {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(new Integer(1));
c.add(new Integer(2));
c.add(new Integer(3));
c.add(new Integer(4));
Iterator it = c.iterator(); //调用集合自身的迭代器
while (it.hasNext()) { //判断下一个元素是否存在
Object tem = it.next(); //next()的返回值为Object类型,需要转换为相应类型
System.out.println (((Integer)tem).intValue() + " ");
}
}
}
-------------------------------------------------------------------------------------------------------------------
List集合除了可以使用Iterator取出元素外还可以使用ListIterator进行迭代;ListIterator接口继承了Iterator接口,除了具有的功能外,还支持添加或更改底层集合中的元素,还支持双向遍历
ListIterator接口的主要方法有:
void add(Object obj):将对象obj添加到当前位置的前面
void set(Object obj):用对象obj替代next或previous方法访问的上一个元素。如果上
次调用后列表结构被修改了,那么将抛出IllegalStateException异 常.
boolean hasPrevious():判断向后迭代时是否有元素可访问
Object previous():返回上一个 对象
int nextIndex():返回下次调用next方法时将返回的元素的索引
int previousIndex():返回下次调用previous方法时将返回的元素的索引
----------------------------------------------------------------------------------------------------------------
LinkList除了集合共有的添加元素的方法外,还有自己独特的添加元素的方法
下面为其类中的部分方法的定义及功能说明。
void addFirst(Object obj): 将对象obj添加到列表的开头
void addLast(Object obj):将对象obj添加到列表的结尾
Object getFirst(): 返回列表开头的元素
Object getLast(): 返回列表结尾的元素
Object removeFirst(): 删除并且返回列表开头的元素
Object removeLast():删除并且返回列表结尾的元素
LinkList也有其独特的构造方法:LinkedList()构造方法:构建一个空的链接列表
LinkedList(Collection c): 构建一个链接列表,并且添加 集合c的所有元素
使用这些构造方法,可以轻松的把 LinkedList 当作一个堆栈、队列或其它面向端点的数据结构
例如:
public class LinkList{
publicstatic void main(String[] args){
LinkedList link = new LinkedList();
link.add("a");
link.add("b");
link.addFirst("c");
link.addLast("e");
System.out.println("首尾元素值是"+ link.getFirst() + ":" + link.getLast());
System.out.print("整个列表中的元素是:");
for (int i = 0; i < link.size(); i++) {
System.out.print(link.get(i) + ",");
}
}
}
-------------------------------------------------------------------------------------------------------------------
Map接口不是Collection接口的继承。
Map基本特性:关键字不能重复,但值可以重复
基本方法如下:
(1)添加、删除操作
Object put(Object key, Object value): 将互相关联的一个关键字与一个值放入该映 像。如果该关键字已经存在,那么与此关键字 相关的新值将取代旧值。方法返回关键字的旧 值,如果关键字原先并不存在,则返回null
Object remove(Object key): 从映像中删除与key相关的映射
void putAll(Map t): 将来自特定映像的所有元素添加给该映像
void clear(): 从映像中删除所有映射
其中的键和值都可以为null。但是,不能把Map作为一个键或值添加给自身。
(2)查询操作
Object get(Object key): 获得与关键字key相关的值,并且返回与关键字key相关的对 象,如果没有在该映像中找到该关键字,则返回null。
boolean containsKey(Object key): 判断映像中是否存在关键字key
boolean containsValue(Object value): 判断映像中是否存在值value
int size(): 返回当前映像中映射的数量
boolean isEmpty() :判断映像中是否有任何映射
(3)视图操作:处理映像中键/值对组
Set keySet():返回映像中所有关键字的视图集 ;因为映射中键的集合必须是唯一的, 您用Set支持。还可以从视图中删除元素,同时,关键字和它相关的值 将从源映像中被删除,但是你不能添加任何元素
Set values():返回映像中所有值的视图集;可以从视图中删除元素,同时,值 和它的关键字将从源映像中被删除,但是不能添加任何元素 Set entrySet():返回Map.Entry对象的视图集,即映像中的关键字/值对。因为映射 是唯一的,用Set支持。还可以从视图中删除元素,同时,这些元素 将从源映像中被删除,但是不能添加任何元素。
Map.Entry接口
Map的entrySet()方法返回一个实现Map.Entry接口的对象集合。集合中每个对象都是底层Map中一个特定的键/值对。通过这个集合的迭代器,可以获得每一个条目(唯一获取方式)的键或值并对值进行更改。当条目通过迭代器返回后,除非是迭代器自身的remove()方法或者迭代器返回的条目的setValue()方法,其余对源Map外部的修改都会导致此条目集变得无效,同时产生条目行为未定义。
Object getKey(): 返回条目的关键字
Object getValue(): 返回条目的值
Object setValue(Object value): 将相关映像中的值改为value,并且返回旧值
Map集合可以使用增强否循环取出键值对;不能使用Iterator迭代器进行迭代处理,但可以先转换成Set集合
HashMap的使用——添加,删除,查找,遍历操作的应用示例
public class Map{
pubicstatic void main(String[] args){
Map<Integer, String> map=new HashMap<Integer, String>();
map.put(1, "小王"); //往Map集合中添加键值对
map.put(2, "小张");
map.put(3, "小李");
map.put(4, "小赵");
map.put(5, "小孙");
map.remove(2); //移除2号键
map.containsKey(3); //判断是否包含3 键
map.containsValue("小张"); //判断是否包含 小张 值
System.out.println(map.size());
Set<Integer> keyset=map.keySet(); //遍历Map,将Map集合转换成Set集合
Iterator<Integer> iterator=keyset.iterator();
while(iterator.hasNext()){
int key=iterator.next();
System.out.print(key+"-"+map.get(key));
}/
}
}