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

黑马程序员-博客 (6) 集合之Collection接口和Iterator方法、Collection接口和Collections工具类

2015-06-06 16:52 661 查看
黑马程序员-博客 (6)

集合之Collection接口和Iterator方法、Collection接口和Collections工具类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

Collection接口

Collection是集合框架中的常用接口。其下有两个子接口:List(列表),Set(集)。

所属关系:

Collection

|--List//元素是有序的,元素可以重复。因为该集合体系有索引。

|--Set//元素是无序的,元素不可以重复。

一、Collection接口中的常见操作

1、添加元素

add(Objectobj); //add方法的参数类型是Object。以便于接收任意类型对象。

2、删除元素

remove(Objectobj);

removeAll(另一集合);//调用者只保留另一集合中没有的元素。

clear();//清空集合

3、判断元素

contains(Objectobj);//判断是否存在obj这个元素

isEmpty();//是否为空

4、获取个数,集合长度

size();

5、取交集

retainAll(另一集合);//调用者只保留两集合的共性元素。

注:集合中存储的都是对象的引用(地址)。

Iterator迭代方法

1、概述

迭代是取出集合中元素的一种方式。

对于集合的元素取出这个动作:

当不足以用一个函数来描述,需要用多个功能来体现,所以就将取出这个动作封装成一个对象来描述。就把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内部的元素。那么取出方式就被定义成了内部类。

而每一个容器的数据结构不同,所以取出的动作细节也不一样。但是都具有共性内容: 判断和取出。那么就可以将这些共性抽取。

那么这些内部类都符合一个规则(或者说都抽取出来一个规则)。该规则就是Iterator。通过一个对外提供的方法:iterator();,来获取集合的取出对象。

因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。

2、迭代的常见操作

hasNext();//有下一个元素,返回真

next();//取出下一个元素

remove();//移除

注:在迭代时循环中next调用一次,就要hasNext判断一次。

使用:

ArrayList a=newArrayList();//创建一个集合

Iteratorit=a.iterator();//获取一个迭代器,用于取出集合中的元素。

第一种打印方式:

for(Iterator iter = a.iterator();iter.hasNext(); )

{

System.out.println(iter.next());

}

第二种打印方式:

Iteratoriter = a.iterator();

while(iter.hasNext())

{

System.out.println(iter.next());

}

3、迭代注意事项

· 迭代器在Collcection接口中是通用的,它替代了Vector类中的Enumeration(枚举)。

· 迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。

· 迭代器的next方法返回值类型是Object,所以要记得类型转换。

Collection接口和Collections工具类

一、概述

Collections是对集合框架的一个工具类。它里边的方法都是静态的,不需要创建对象。并未封装特有数据。

在Collections工具类中大部分方法是用于对List集合进行操作的,如比较,二分查找,随机排序等。

二、常见操作

1、查找

Tmax(Collection<? extends T> coll);//根据集合的自然顺序,获取coll集合中的最大元素

Tmax(Collection<? extends T> coll,Comparator<? super T> comp);//根据指定比较器comp的顺序,获取coll集合中的最大元素

intbinarySearch(Lsit<? extends Comparable<? super T>> list,Tkey);//二分法搜索list集合中的指定对象

2、替换

voidfill(List<? super T> list, T obj);//将list集合中的全部元素替换成指定对象obj

booleanreplaceAll(List<T> lsit,T oldVal,T newVal);//用newVal替换集合中的oldVal值

void swap(Listlist,int i,int j);/在指定列表的指定位置处交换元素

3排序:

void shuffle(List<?> list);//使用默认随机源对list集合中的元素进行随机排序

void sort(Lsit<T> list);//根据自然顺序对list集合中的元素进行排序

voidsort(List<T> lsit,Comparator<? super T> c);//根据指定比较器c的排序方式对list集合进行排序

4、反转

reverse(List<?> list);//反转list集合中元素的顺序

Comparator reverseOrder();//返回一个比较器,强行逆转了实现Comparable接口的对象的自然顺序

ComparatorreverseOrder(Comparator<T> cmp);//返回一个比较器,强行逆转了指定比较器的顺序

5、同步的集合

List<T>synchronizedList(List<T> list);//返回支持的同步(线程安全的)List集合

Map<K,V>synchronizedList(Map<K,V> m);//返回支持的同步(线程安全的)Map集合

三、Collections和Collection的区别

Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。

它有两个常用的子接口:

List:对元素都有定义索引。有序的。可以重复元素。

Set:不可以重复元素。无序

Collections是集合框架中的一个工具类。该类中的方法都是静态的。提供的方法中有可以对list集合进行排序,二分查找等方法

通常常用的集合都是线程不安全的。因为要提高效率。如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。

小练习:

需求:使用Collections中的方法fill对List集合中的部分元素进行替换
思路:1、将List集合中要替换的部分元素取出,并存入另一集合中
2、将原集合中的要替换元素移除
3、用fill将要替换的元素进行替换
4、将取出的部分增加进集合
*/
import java.util.*;
class  FillTest
{
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();

list.add("abc");
list.add("ab");
list.add("abcd");
list.add("a");
list.add("abcde");

try
{
fillSome(list,1,5,"shenma");
}
catch (InputException e)
{
System.out.println(e.toString());
}
System.out.println(list);
}
//替换部分元素方法
public static void fillSome(List<String> list,int start,int end,String s)throws InputException
{
if(start>=end)
throw new InputException("没有要替换的元素");//如果输入的end小于或者等于start,则抛出异常

//定义一个新集合
List<String> li=new ArrayList<String>();

//因为每移除一次,后面的元素就会补上,所以这里用y来控制次数
for (int x=start,y=start;y<end ; y++)
{
li.add(list.get(x));//将需要替换的元素增加到新集合
list.remove(x);//移除需要替换的元素
}

Collections.fill(li,s);//替换成需要的元素s

list.addAll(start,li);//将替换的部分增加进原集合
}

}

//自定义异常
class InputException extends Exception
{
InputException(String Massage)
{
super(Massage);
}
}


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: