您的位置:首页 > 职场人生

黑马程序员_Java_集合的基本用法总结

2014-10-10 15:19 323 查看
---------------------------------------------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));

}/

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: