黑马程序员-博客 (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集合进行排序,二分查找等方法
通常常用的集合都是线程不安全的。因为要提高效率。如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
小练习:
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
集合之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培训、期待与您交流! -------
相关文章推荐
- 黑马程序员-博客 (4) 面向对象二之包装类、抽象类、接口
- 面试题28字符串的排列
- 职场必备:简历信息图怎么做?
- 常见面试题系列1——原地消除字符串连续的空白字符
- 【JAVA面试题】在面试时怎么回答java垃圾回收机制
- 黑马程序员——Java基础---集合(Collection和List)
- 黑马程序员——Java基础-----正则表达式
- 新浪微博产品管培生求职之路——微博产品体验报告
- 编程技术面试的五大要点
- 黑马程序员——Java基础---异常
- 黑马程序员----面向对象1(匿名对象、封装、构造函数、this、static)
- 世界需要程序员
- 黑马程序员——Java基础---常用类(下)
- 面试题:构造方法中可不可以有return语句呢?
- 程序员的量化交易之路(29)--Cointrader之Tick实体(16)
- 黑马程序员———单例模式
- 黑马程序员--关于一些错误的解决办法
- 黑马程序员_面向对象(1)
- IOS 面试题
- 黑马程序员--生产者和消费者模式