您的位置:首页 > 编程语言 > Java开发

java自学之旅(4)集合类2

2016-06-25 14:10 411 查看
集合框架:
1)Collection
     addAll、containsAll
2)Iterator(迭代器)
     hasNext、next方法
     remove方法
     增强型for循环
3)泛型机制
      泛型在集合中的应用

addAll:该方法需要我们传入一个集合,并将该集合中的所有元素添加到当前集合中。
如果次Collection由于调用而发生更改,则返回true。

containsAll:该方法用于判断当前集合是否包含给定集合中的所有元素,若包含则返回true。

hasNext、next方法:
1)迭代器用于遍历集合元素
2)迭代器Iterator是一个接口,集合在重写Collection的Iterator()方法时利用内部类提供的迭代器实现。
3)Iterator提供了统一的遍历集合元素的方式

     — boolean hasNext()   判断集合是否还有元素可以遍历
     — E next()   返回迭代的下一个元素

remove方法
1)在使用迭代器遍历集合时,不能通过集合的的remove方法来删除集合元素,否则会抛出并发更改异常。我们可以通过迭代器自身提供的remove()方法来删除通过next()迭代出的元素。— void remove()
2)迭代器的删除方法是在元集合中删除元素。
3)注意:在调用remove方法前,必须通过迭代器的next()方迭代过元素,那么删除的就是这个元素。并且不能再次调用remove方法,除非再次调用next()后方可再次调用。

增强型for循环
该循环只用与遍历集合或数组。
for (循环类型 e : 集合或数组){
                 循环体
      }
本质:新循环并非新的语法,而是在编译过程中,编译器会将新循环转化为迭代器的模式。所以新循环本质上是迭代器。

泛型在集合中的应用:
泛型的本质是参数化类型。在类、接口、方法的定义过程当中,所操作的数据类型被传入的参数指定。
java泛型机制广泛应用于集合框架中。所有的集合类型都带有泛型参数,这样在创建集合时可以指定放入集合中元素的类型。java编译器可以据此进行类型检查,这样可以减少代码在运行时出现错误的可能性。

package mycollection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class TestCollection2 {
public static void main(String[] args) {
testAddAllAndContainsAll();
System.out.println("****************************************************");
testIterator();
System.out.println("****************************************************");
testRemove();
System.out.println("****************************************************");
testForeach();
}

/**测试addAll和containsAll方法**/
public static void testAddAllAndContainsAll(){
Collection<String> c1 = new ArrayList<>();
c1.add("java");
c1.add("cpp");
c1.add("php");
c1.add("c#");
c1.add("objective-c");
System.out.println(c1);

Collection<String> c2 = new HashSet<>();
c2.addAll(c1);
System.out.println(c2);//为什么元素复制后输出的的顺序发生改变??

Collection<String> c3 = new ArrayList<>();
c3.add("java");
c3.add("cpp");
System.out.println(c1.containsAll(c3));
}

/**使用Iterator的hasNext方法、next方法遍历集合**/
public static void testIterator(){
Collection<String> c1 = new ArrayList<>();
c1.add("java");
c1.add("cpp");
c1.add("php");
c1.add("c#");
c1.add("objective-c");

Iterator<String> it = c1.iterator();
while (it.hasNext()){
String str = it.next();//判断集合是否还有元素可以遍历
System.out.println(str);//返回迭代的下一个元素
}
}

/**测试Iterator的remove方法**/
public static void testRemove(){
Collection<String> c1 = new ArrayList<>();
c1.add("java");
c1.add("cpp");
c1.add("php");
c1.add("c#");
c1.add("objective-c");
System.out.println(c1);
Iterator<String> it = c1.iterator();
while (it.hasNext()){
String str = it.next();
//用indexOf方法判断字符串元素是否包含c
if (str.indexOf("c")!=-1){ //为什么这行里的c用单引号也可以??
it.remove();
}
}
System.out.println(c1);
}

/**使用增强型for循环遍历集合**/
public static void testForeach(){
Collection<String> c1 = new ArrayList<>();
c1.add("java");
c1.add("cpp");
c1.add("php");
c1.add("c#");
c1.add("objective-c");
for (String str : c1){
//将遍历到的字符串元素转化为大写后输出
System.out.println(str.toUpperCase()+" ");
}
}

}


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