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

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



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集合

 

三、CollectionsCollection的区别

        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);
	}
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值