文档章节

JAVA中Collection和Collections的区别

o
 osc_x4h57ch8
发布于 2018/04/24 09:40
字数 559
阅读 11
收藏 0

精选30+云产品,助力企业轻松上云!>>>

1、java.util.Collection 是一个 集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。

以下接口实现了Collection接口: 
map,set,list,vector 

Collection  
├List  
│├LinkedList  
│├ArrayList  
│└Vector  
│ └Stack  
└Set
2、java.util.Collections 是一个包装类。它包含有各种有关集合操作的 静态多态方法。此类 不能实例化,就像一 个工具类,服务于Java的Collection框架。
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 
 
public class TestCollections { 
   
  public static void main(String args[]) { 
    //注意List是实现Collection接口的 
    List list = new ArrayList(); 
    double array[] = { 112, 111, 23, 456, 231 }; 
    for (int i = 0; i < array.length; i++) { 
      list.add(new Double(array[i])); 
    } 
    Collections.sort(list); 
    for (int i = 0; i < array.length; i++) { 
      System.out.println(list.get(i)); 
    } 
    // 结果:23 111 112 231 456 
  } 
}

具体来看下Collections中的sort方法:(以下代码摘自Collections类中源码)

 public static <T extends Comparable<? super T>> void sort(List<T> list) {
        Object[] a = list.toArray(); Arrays.sort(a); ListIterator<T> i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.set((T)a[j]); } }

可以看到他的静态方法sort方法可以传入一个list,上面说过list是实现了Collection接口。然后将list转成了数组对象后,调用了Array的sort方法,将数组排序,再用list的迭代器(注意不是collection迭代器)一个个得赋值回去,就使得传入的list变成了一个有序的list。

对以上的步骤相信看了源码都能看懂,数组的sort方法底层调用的是一个DualPivotQuicksort的方法,看着名字像快排,但可能有些不同,暂时没有仔细去研究。

需要注意的是

  • 由于set,map都有SortedSet,TreeSet和SortedMap实现类,所以Collections中并没有对set和map支持sort方法
  • sort方法默认的顺序是升序,如果你想要降序排,你可以调用Collections中的另一个sort方法
public static <T> void sort(List<T> list, Comparator<? super T> c) {
        Object[] a = list.toArray(); Arrays.sort(a, (Comparator)c); ListIterator i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.set(a[j]); } }

可以看到,这个sort方法是传入了一个比较器,所以你可以定义如何来排序。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Collections工具类常用API

Collection和Collections有什么区别? Collection是集合体系的最顶层,包含了集合体系的共性 Collections是一个工具类,方法都是用于操作Collection `/* Collections: 面试题:Collection和...

学亮编程手记
2019/04/29
8
0
8张图理解Java

一图胜千言,下面图解均来自Program Creek网站的Java教程,目前它们拥有最多的票选。 1、字符串不变性 下面这张图展示了这段代码做了什么 String s = "abcd";s = s.concat("ef"); 2、equals(...

Java团长17
2018/07/11
0
0
8张图理解Java

一图胜千言,下面图解均来自Program Creek网站的Java教程,目前它们拥有最多的票选。 1、字符串不变性 下面这张图展示了这段代码做了什么 String s = "abcd";s = s.concat("ef"); 2、equals(...

Java团长17
2017/11/30
0
0
8张图理解Java

8张图理解Java 一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选。如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟。 ##1、字符串不变性 下面这张...

奶berber
2018/07/03
0
0
8张图理解Java

一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选。如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟。 1、字符串不变性 下面这张图展示了这段代码...

LCZ777
2014/06/12
26
0

没有更多内容

加载失败,请刷新页面

加载更多

asp.net core之NLog

NuGet添加 NLog.Web.AspNetCore。 <PackageReference Include="Microsoft.AspNetCore.App" /> 添加配置文件 新建一个文件nlog.config(建议全部小写,linux系统中要注意), 并右键点击其属性......

一介草民Coder
41分钟前
23
0
.NET中的struct和class有什么区别? - What's the difference between struct and class in .NET?

问题: .NET中的struct和class有什么区别? 解决方案: 参考一: https://stackoom.com/question/3OT/NET中的struct和class有什么区别 参考二: https://oldbug.net/q/3OT/What-s-the-differ...

富含淀粉
今天
23
0
android:layout_weight是什么意思? - What does android:layout_weight mean?

问题: I don't understand how to use this attribute. 我不明白如何使用这个属性。 Can anyone tell me more about it? 谁能告诉我更多关于它的事情? 解决方案: 参考一: https://stacko...

javail
今天
17
0
CSS背景不透明度[重复] - CSS Background Opacity [duplicate]

问题: This question already has an answer here: 这个问题已经在这里有了答案: How do I give text or an image a transparent background using CSS? 如何使用CSS为文本或图像提供透明背...

fyin1314
今天
31
0
node http 获取gb2312网页如何转为utf8

最初,我想当然认为是下述做法,但被证明是错误的 const http = require('http'), iconv = require('iconv-lite');const url = 'http://xxx';http.get(url, function(res) { var bo......

高延
今天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部