黑马程序员技术交流社区

标题: Collection 和 Collections的区别? [打印本页]

作者: 何竹冬    时间: 2013-1-3 15:46
标题: Collection 和 Collections的区别?
如题,Collection 和 Collections的区别?
作者: 高境    时间: 2013-1-3 15:51
Collection是集合类的上级接口,继承与他的接口主要有Set 和List。
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
作者: 刘文超    时间: 2013-1-3 16:05
本帖最后由 刘文超 于 2013-1-3 16:18 编辑

看到好多问这两个的区别的、好像面试的时候也要问吧、
个人感觉这两个也没什么不好区别的呀,只是名字有点像罢了、

Collection是个java.util下的接口,它是各种集合结构的父接口。
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。

网上有篇文章写得很好,就是来说明这两个东东的、给你看一下:
Collection 层次结构中的根接口。
Collection 表示一组对象,这些对象也称为 collection的元素。
一些 collection 允许有重复的元素,而另一些则不允许。
一些 collection 是有序的,而另一些则是无序的。
JDK 不提供此接口的任何直接实现:它提供更具体的子接口(如 Set 和List)实现。
此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

Collection   
├List   
│├LinkedList   
│├ArrayList   
│└Vector   
│ └Stack   
└Set

collections
此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。
它包含在 collection 上操作的多态算法,即“包装器”,
包装器返回由指定 collection 支持的新 collection,以及少数其他内容。
如果为此类的方法所提供的 collection 或类对象为 null,则这些方法都会抛出 NullPointerException。
lection 支持的新 collection,以及少数其他内容。
如果为此类的方法所提供的 collection 或类对象为 null,则这些方法都会抛出 NullPointerException。

那、这是代码:
  1. import java.util.ArrayList;   
  2. import java.util.Collections;   
  3. import java.util.List;   
  4.   
  5. public class TestCollections {   
  6.       
  7.     public static void main(String args[]) {   
  8.         //注意List是实现Collection接口的   
  9.         List list = new ArrayList();   
  10.         double array[] = { 112, 111, 23, 456, 231 };   
  11.         for (int i = 0; i < array.length; i++) {   
  12.             list.add(new Double(array[i]));   
  13.         }   
  14.         Collections.sort(list);   
  15.         for (int i = 0; i < array.length; i++) {   
  16.             System.out.println(list.get(i));   
  17.         }   
  18.         // 结果:23.0 111.0 112.0 231.0 456.0   
  19.     }   
  20. }
复制代码

作者: 莫嘉伟    时间: 2013-1-3 16:11
Collection是一个接口,它是List、Set和Queue接口的父接口,该接口里定义的方法既可以用于操作Set集合也可以用于气喘吁吁 作List和Queue集合;而Collections是一个操作集合的工具类,它可以用来操作Set、List和Map之类的集合,Collections里定义了大量方法对集合元素进行排序、查询和修改等操作,还可以将集合对象设为不可变、对集合对象实现同步控制等方法。
作者: 谢辉林    时间: 2013-1-3 16:15
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
作者: 张会文    时间: 2013-1-3 16:33
个是接口一个是类,
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
  1. 1) 排序(Sort)
  2. 使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此列表内的所有元素都必须是使用指定比较器可相互比较的
  3. double array[] = {112, 111, 23, 456, 231 };
  4. for (int i = 0; i < array.length; i++) {
  5. list.add(new Double(array[i]));
  6. }
  7. Collections.sort(list);
  8. for (int i = 0; i < array.length; i++) {
  9.    System.out.println(li.get(i));
  10. }
  11. //结果:112,111,23,456,231
  12. 2) 混排(Shuffling)
  13. 混排算法所做的正好与 sort 相反: 它打乱在一个 List 中可能有的任何排列的踪迹。也就是说,基于随机源的输入重排该 List, 这样的排列具有相同的可能性(假设随机源是公正的)。这个算法在实现一个碰运气的游戏中是非常有用的。例如,它可被用来混排代表一副牌的 Card 对象的一个 List 。另外,在生成测试案例时,它也是十分有用的。
  14. Collections.Shuffling(list)
  15. double array[] = {112, 111, 23, 456, 231 };
  16. for (int i = 0; i < array.length; i++) {
  17. list.add(new Double(array[i]));
  18. }
  19. Collections.shuffle(list);
  20. for (int i = 0; i < array.length; i++) {
  21.    System.out.println(li.get(i));
  22. }
  23. //结果:112,111,23,456,231
  24. 3) 反转(Reverse)
  25.        使用Reverse方法可以根据元素的自然顺序 对指定列表按降序进行排序。
  26. Collections.reverse(list)
  27. double array[] = {112, 111, 23, 456, 231 };
  28. for (int i = 0; i < array.length; i++) {
  29. list.add(new Double(array[i]));
  30. }
  31. Collections. reverse (list);
  32. for (int i = 0; i < array.length; i++) {
  33.    System.out.println(li.get(i));
  34. }
  35. //结果:231,456,23,111,112
  36. 4) 替换所以的元素(Fill)
  37. 使用指定元素替换指定列表中的所有元素。
  38. String str[] = {"dd","aa","bb","cc","ee"};
  39. for(int j=0;j<str.length;j++){
  40. li.add(new String(str[j]));
  41. }
  42. Collections.fill(li,"aaa");
  43. for (int i = 0; i < li.size(); i++) {
  44. System.out.println("list[" + i + "]=" + li.get(i));

  45. }
  46. //结果:aaa,aaa,aaa,aaa,aaa

  47. 5) 拷贝(Copy)
  48. 用两个参数,一个目标 List 和一个源 List, 将源的元素拷贝到目标,并覆盖它的内容。目标 List 至少与源一样长。如果它更长,则在目标 List 中的剩余元素不受影响。
  49. Collections.copy(list,li): 后面一个参数是目标列表 ,前一个是源列表
  50. double array[] = {112, 111, 23, 456, 231 };
  51. List list = new ArrayList();
  52. List li = new ArrayList();
  53. for (int i = 0; i < array.length; i++) {
  54. list.add(new Double(array[i]));
  55. }
  56. double arr[] = {1131,333};
  57. String str[] = {"dd","aa","bb","cc","ee"};
  58. for(int j=0;j<arr.length;j++){
  59. li.add(new Double(arr[j]));
  60. }
  61. Collections.copy(list,li);
  62. for (int i = 0; i <list.size(); i++) {
  63. System.out.println("list[" + i + "]=" + list.get(i));
  64. }
  65. //结果:1131,333,23,456,231
  66. 6) 返回Collections中最小元素(min)
  67. 根据指定比较器产生的顺序,返回给定 collection 的最小元素。collection 中的所有元素都必须是通过指定比较器可相互比较的
  68. Collections.min(list)
  69. double array[] = {112, 111, 23, 456, 231 };
  70. List list = new ArrayList();
  71. for (int i = 0; i < array.length; i++) {
  72. list.add(new Double(array[i]));
  73. }
  74. Collections.min(list);
  75. for (int i = 0; i <list.size(); i++) {
  76. System.out.println("list[" + i + "]=" + list.get(i));
  77. }
  78. //结果:23
  79. 7) 返回Collections中最小元素(max)
  80. 根据指定比较器产生的顺序,返回给定 collection 的最大元素。collection 中的所有元素都必须是通过指定比较器可相互比较的
  81. Collections.max(list)
  82. double array[] = {112, 111, 23, 456, 231 };
  83. List list = new ArrayList();
  84. for (int i = 0; i < array.length; i++) {
  85. list.add(new Double(array[i]));
  86. }
  87. Collections.max(list);
  88. for (int i = 0; i <list.size(); i++) {
  89. System.out.println("list[" + i + "]=" + list.get(i));
  90. }
  91. //结果:456
  92. 8) lastIndexOfSubList
  93. 返回指定源列表中最后一次出现指定目标列表的起始位置
  94. int count = Collections.lastIndexOfSubList(list,li);
  95. double array[] = {112, 111, 23, 456, 231 };
  96. List list = new ArrayList();
  97. List li = new ArrayList();
  98. for (int i = 0; i < array.length; i++) {
  99. list.add(new Double(array[i]));
  100. }
  101. double arr[] = {111};
  102. String str[] = {"dd","aa","bb","cc","ee"};
  103. for(int j=0;j<arr.length;j++){
  104. li.add(new Double(arr[j]));
  105. }
  106. Int locations = Collections. lastIndexOfSubList (list,li);
  107. System.out.println(“===”+ locations);
  108. //结果 3
  109. 9) IndexOfSubList
  110. 返回指定源列表中第一次出现指定目标列表的起始位置
  111. int count = Collections.indexOfSubList(list,li);
  112. double array[] = {112, 111, 23, 456, 231 };
  113. List list = new ArrayList();
  114. List li = new ArrayList();
  115. for (int i = 0; i < array.length; i++) {
  116. list.add(new Double(array[i]));
  117. }
  118. double arr[] = {111};
  119. String str[] = {"dd","aa","bb","cc","ee"};
  120. for(int j=0;j<arr.length;j++){
  121. li.add(new Double(arr[j]));
  122. }
  123. Int locations = Collections.indexOfSubList(list,li);
  124. System.out.println(“===”+ locations);
  125. //结果 1
  126. 10) Rotate
  127. 根据指定的距离循环移动指定列表中的元素
  128. Collections.rotate(list,-1);
  129. 如果是负数,则正向移动,正数则方向移动
  130. double array[] = {112, 111, 23, 456, 231 };
  131. List list = new ArrayList();
  132. for (int i = 0; i < array.length; i++) {
  133. list.add(new Double(array[i]));
  134. }
  135. Collections.rotate(list,-1);
  136. for (int i = 0; i <list.size(); i++) {
  137. System.out.println("list[" + i + "]=" + list.get(i));
  138. }
  139. //结果:111,23,456,231,112

复制代码

作者: 而今从头越2012    时间: 2013-1-3 18:07
你可以查一下java API文档,看看他们属于什么,以及都有哪些方法和哪些子类。
java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态、多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
作者: 谢毅    时间: 2013-1-3 18:46
Collections是针对集合类的一个帮助类。提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。
相当于对Array进行类似操作的类——Arrays。如,Collections.max(Collection coll); 取coll中最大的元素。Collections.sort(List list); 对list中元素排序




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