黑马程序员技术交流社区

标题: Collection容器问题 [打印本页]

作者: 魏-玉-彪    时间: 2012-7-24 18:02
标题: Collection容器问题
package org.container;
import java.util.*;
public class UseCollection {
                public static void main(String[] args) {
                        Collection<String> collection = new ArrayList<String>(Arrays.asList(
                                        "A", "B", "C", "D", "E"));                                        // 创建容器       
                        String[]strArray = { "F", "G", "H", "I", "J" };               
                        collection.addAll(Arrays.asList(strArray));
                        Collections.addAll(collection, "M", "N", "O", "P", "Q");
                        System.out.println(collection);
                        //迭代容器中的每一个元素
                        for(Iterator it = collection.iterator();it.hasNext();){       
                                System.out.print(it.next() + " ");
                        }
                        System.out.println();
                        for (String i : collection) {
                                System.out.print(i + " ");
                        }
                        System.out.println();
                        collection.remove("A");                                                        // 移除一个元素
                        for (String i : collection) {
                                System.out.print(i + " ");
                        }
                        Collection<String> part = new ArrayList<String>(Arrays.asList(
                                        "B", "C", "D", "E"));
                        System.out.println();
                        collection.retainAll(part);                                                        // 保存相同的元素
                        for (String str : collection) {
                                System.out.print(str + " ");
                        }
                        System.out.println();
                        Object[]o = collection.toArray();                                                // 返回一个数组
                        System.out.println(Arrays.deepToString(o));
                        collection.removeAll(collection);                                                // 移除所有的元素
                        System.out.println(collection.size());
                }
}

1以上代码中,创建容器为什么是:Collection<String> collection = new ArrayList<String>(Arrays.asList(
                                        "A", "B", "C", "D", "E"));                                        // 创建容器       
2String[]strArray = { "F", "G", "H", "I", "J" };               
                        collection.addAll(Arrays.asList(strArray));
                        Collections.addAll(collection, "M", "N", "O", "P", "Q");//为何这里用的是Collections大写?
3
                       


作者: 王璐    时间: 2012-7-24 18:20
1,构造一个包含指定 元素的集合,有初始化值,Arrays.asList( )返回一个list集合,所构造的集合一创建里面就有元素。

2,Collections  是一个工具类,里面的方法都是静态的,所以都是类名.方法名,而collection是一个集合的引用,楼主要看清楚喽!
作者: 魏-玉-彪    时间: 2012-7-24 18:50
for (String str : collection) {
                                System.out.print(str + " ");


这个for 循环怎么解释? 请详细分步 注释
作者: 王璐    时间: 2012-7-24 18:53
魏-玉-彪 发表于 2012-7-24 18:50
for (String str : collection) {
                                System.out.print(str + " ");

用增强for循环打印collection引用的集合中的元素,这需要解释吗
作者: 李菁    时间: 2012-7-24 19:07
1、规定Collection集合中只能存入String类型的元素,在创建Collection集合时,把一个ArrayList集合赋值给Collection集合
2、小写的collection是集合的名字,大写的Collection是一个Java类,直接用类名.方法名调用里面的静态方法
作者: 周玉龙    时间: 2012-7-24 19:18
第一题:1以上代码中,创建容器为什么是:Collection<String> collection = new ArrayList<String>(Arrays.asList(
                                        "A", "B", "C", "D", "E"));                                        // 创建容器        
Collection类时ArrayList的父类,这里就体现了多态。父类的引用指向子类的对象。所以可以这么写,<String>  表示泛型,说明集合里面只能存String类型的。
ArrayList中的构造方法中有一个public ArrayList(Collection<? extends E> c),就是说可以传一个集合进去c进去,这里的类型E要跟你前面定义的<String>  一样。
Arrays.asList(  "A", "B", "C", "D", "E") 这句话的意思是Arrays类(它是数组的工具类,)中有个一个静态的方法public static <T> List<T> asList(T... a)。直接加元素进去,并返回List类的子类对象。
示例:List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");支持列表的数组。
而且List类也是Collection的子类。所以可以直接传给ArrayList的构造器。
第二题:  Collections.addAll(collection, "M", "N", "O", "P", "Q");//为何这里用的是Collections大写?
用到的是集合工具类Collections里面的静态方法addAll(),public static <T> boolean addAll(Collection<? super T> c, T... elements)
这个方法涉及到可变参数,你只要知道前面那个参数是表示你要往哪个集合里加元素。后面的参数表示你要加的元素。
知道了这个,collection.addAll(Arrays.asList(strArray));这句话的意思你应该能明白。这是collection类中的方法。

作者: 王志明    时间: 2012-7-24 19:21
1.Collection是单列集合的接口,不能直接创建对象,List接口继承了Collection接口,而ArrayList实现了List接口,所以ArrayList也是Collection的后代,这里就可以使用多态了,<String>是泛型,是指这个集合中只能存放String类型的对象,泛型在编译时检查。
2. Collections是操作集合的一个工具类,它里面提供了一些常用的static方法,addAll()方法是将一系列数据添加到指定集合中。


作者: 张世威    时间: 2012-7-24 19:30

1以上代码中,创建容器为什么是:Collection<String> collection = new ArrayList<String>(Arrays.asList(
                                        "A", "B", "C", "D", "E"));                                        // 创建容器        
2String[]strArray = { "F", "G", "H", "I", "J" };               
                        collection.addAll(Arrays.asList(strArray));
                        Collections.addAll(collection, "M", "N", "O", "P", "Q");//为何这里用的是Collections大写?
3



1:Collection<String> collection = new ArrayList<String>(Arrays.asList(
                                        "A", "B", "C", "D", "E"));   
   这个叫面向接口编程,举个例子:Collection 指车子吧,那么那么ArrayList就指具体的一辆车子了,比如说你的
坐骑。就好像你在说,我的坐骑也是车子。              子类是父类,但是你要是说车子是你的坐骑,那就有点问题了,
就好像说车子是时自行车,那么其他的车子干嘛去了?只能给你这样打比喻了,以后慢慢在理解吧

2:大哥注意看,Collections 和collection是不同一个东西,前者是一个专门用来操作集合的工具类,而
        后者是你自己创建的一个对象。看起来长得像而已,Collections是为Collection的对象服务的专业工具。哥们
看仔细了。




作者: 魏-玉-彪    时间: 2012-7-31 16:43
谢谢各位大侠,本问题已解决




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2