工具类&集合练习

工具类介绍

Java中提供了大量的接口和实现类,完成了各种功能,基本满足大家开发中的方方面面的需求;

但是总有些额外的功能,是这些类自身的功能所不能满足的;

比如我们学习的各种集合类,本身提供了对数据的各种操作方法;但是还有些常用的功能,比如排序、求最大值等功能,就需要再定义一个类,在这个类里书写这些处理方法;

像这种专门定义的用于对其他类进行处理和功能补充的类,就叫做工具类;

Java中的工具类,一般方法都是静态的,而且都是保存在java.util中;

在实际开发中,项目中一般也会专门定义一个包,存放自己定义的工具类,如:com.kuaixueit.util;

这里给大家介绍一下Java中两个常用的工具类:

Collections 和 Arrays;

以后大家开发中,使用集合和数组的时候,如果需要的功能再API中找不到,就要去找这个类有没有对应的工具类;

如果没有工具类,或者工具类中也没有提供相应的方法,需要上网搜索;

如果还不行,再考虑自己写;

https://www.zhihu.com/video/1069353440009854976


集合工具类Collections

Collections工具类主要是用来操作集合的;如果在使用集合类时没有发现想要的功能,就需要先到Collections工具类中找一找;

结论:

Collections类在java.util包中,使用需要手动导包;
Collections中提供的全部都是静态函数,这些静态函数要么操作集合,要么返回新的集合;
使用Collections的方法,不能传递null做参数,否则会抛出空指针异常;

当有的函数需要返回一个List集合时,如果没有任何数据返回,不应该返回一个null,这样做容易让调用函数的地方出现空指针异常;

也不好返回一个新建的ArrayList对象,因为每调用一次函数,都会创建一个新的空的对象出来,所以这个时候就可以返回这个空的集合。

添加方法

注意:可变参数,可以直接接受一个数组;如果这个数组是一个基本类型的数组,则这个方法默认为这个数组是一个对象;

排序:

在使用这两个方法时,因为排序都必须要有比较,所以要么集合中的对象都有自然排序的功能,要么需要传递一个比较器对象;

需求:

对List集合中的字符串按照长度排序。

public 

求最值:

二分查找:

反转:

随机重置(洗牌):

数组工具类Arrays

Collections主要是用来操作集合的,Arrays则主要是用来操作数组的;数组也是一个对象,除了继承自Object的方法外,就只提供了一个length属性,并没有其他什么操作;所以JDK专门提供了一个Arrays类,用于操作数组;

这个方法将一个数组转换为一个list集合;但是这个集合底层还是原来那个数组;

而且不像ArrayList那样是一个可变数组,这个数组不能扩张;所以不能对新得到的这个List集合进行增删操作;

Collections和Arrays综合练习

需求:

将字符串数组中的数据进行反转;

思考:

因为数组中没有反转方法,但是集合工具类中有反转的方法;
所以可以考虑先将数组转换为List集合,然后使用Collections的反转方法;

总结:

通过工具类中的方法,我们可以实现集合和数组的相互转换:
数组转为List集合:Arrays.asList();
将集合转为数组:Collection接口定义的方法toArray();
List集合和Set集合的相互转换:addAll函数;
实际开发中,如果要操作的数组或者集合本身没有相应的方法,可以找工具类;工具类中也没有,可以转换为其他对象,再找方法,还没有再找对应的工具类;
如果不管怎么转换,都没有相应的功能,就上网搜索;如果最后还找不到,才自己手写;、

JUnit单元测试介绍

为项目中添加JUnit单元测试的库:

创建一个类的单元测试类:

@Test:表示被注解的方法相当于一个main函数,用于执行测试方法;注意:被这个注解标记的方法,不能是静态的,不能有参数,返回值类型应该是void.

@Before:表示被注解的方法会在每一个被@Test标记的函数执行前都执行一遍

@After:表示被注解的方法会在每一个被@Test标记的函数执行后都执行一遍

被下面两个注解注解的函数都必须是静态的函数

@BeforeClass:表示被注解会在所有测试函数执行前都执行一遍

@AfterClass:表示被注解的函数会在所有测试函数执行后都执行一遍;

https://www.zhihu.com/video/1069355176938414080

java collections_【Java视频教程】day31-集合练习??相关推荐

  1. 视频专辑:JAVA语言入门视频教程

    为什么80%的码农都做不了架构师?>>>    专辑:JAVA语言入门视频教程 简介:该视频专辑是java的入门教程,适合初学者学习java,讲的也非常容易懂,希望能给想学习java ...

  2. 视频教程-零基础学Java编程—Java从小白到大咖-Java

    零基础学Java编程-Java从小白到大咖 专注编程领域,拥有多年开发经验 王小科 ¥168.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取优惠, ...

  3. java基础入门传智播客 源码_Java-_2020年版Java零基础视频教程(Java 0基础,Java初学入门)魔鬼讲师老杜出品...

    不会闲聊!!!不会扯淡!!!小UP只会分享与Java相关的学习资源 还记得那年带你Java入门的一声"吼"吗? B站目前播放量已经快到450多万播放量的Java零基础教程的创作者& ...

  4. Java基础知识回顾之四 ----- 集合List、Map和Set

    前言 在上一篇中回顾了Java的三大特性:封装.继承和多态.本篇则来介绍下集合. 集合介绍 我们在进行Java程序开发的时候,除了最常用的基础数据类型和String对象外,也经常会用到集合相关类. 集 ...

  5. Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介

    1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...

  6. 做了6年的Java,java视频教程传智播客

    JAVA基础 JAVA异常分类及处理 异常分类 异常的处理方式 Throw和throws的区别 JAVA反射 动态语言 反射机制概念 (运行状态中知道类所有的属性和方法) Java反射API 反射使用 ...

  7. java创建集合有的不用泛型_为什么在Java泛型右手边的集合类型没有任何影响?...

    使用Java的Generics功能我创建了一个List对象,在左侧我使用的是原始类型List,在右侧我使用的是泛型类型ArrayList. List myList=new ArrayList(); 我 ...

  8. python网络编程视频教程_Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密)...

    Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密) 全面理解BIO/NIO/AIO 网络层编程,是每一个开发者都要面对的技术.课程为解决大家学习网络层知识的难题, ...

  9. java hashset 源码_Java集合源码分析-HashSet和LinkedHashSet

    前两篇文章分别分析了Java的ArrayList和LinkedList实现原理,这篇文章分析下HashSet和LinkedHashSet的源码.重点讲解HashSet,因为LinkedHashSet是 ...

  10. java list取值_Java集合详解

    一.集合的由来 通常,我们的程序需要根据程序运行时才知道创建多少个对象.但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型.为了满足这些常规的编程需要,我们要 ...

最新文章

  1. 引进博士:118万安家房补+18万经费;硕士:42万安家房补+10万经费
  2. ip pim spare 源树 和 共享树_Pim通用规则+Dense模式规则+Sparse模式规则
  3. Eclipse配置注释模板的方法
  4. Linux从入门到精通——Apache
  5. lt;%%gt;创建内联代码块(表达)
  6. HttpURLConnection和HttpClient的简单用法
  7. 开源PagerSlidingTabStrip的使用Tab与ViewPager的完美结合
  8. 永远不要去依赖别人_感悟人生的经典句子:不要轻易去依赖一个人
  9. 阅读一定时间后获得实现逻辑_大家都在好奇,18天读18本书的60分钟高效阅读,怎么这么火...
  10. Thinkphp if标签不支持3层以上嵌套
  11. 基于jQuery动画二级下拉导航菜单
  12. 水星usb无线网卡linux驱动下载,水星USB无线网卡mw150us苹果macOS系统驱动成功
  13. 2019信用卡权益总结之十三:延误险
  14. 21.手绘Spring IOC运行时序图
  15. malloc()动态分配内存
  16. html css语义化
  17. EEPROM(24C64)的IIC通讯调试记录要点,使正点原子例程兼容性更好
  18. 论android等平台回音消除解决方案
  19. 4K、2K、1080P、720P是什么? 4K电视机、拍照手机、录像机等设备的分辨率又是多少?
  20. 知乎创始人周源:实时问答的知乎Live如何变现?

热门文章

  1. PHP同时连接多个mysql数据库_php如何同时连接多个数据库
  2. linux运shell 出现commond vim_有了这个神器,再也不怕shell写得不对了
  3. php框架where条件使用,where条件
  4. MAVEN的使用入门
  5. oracle 11g 大小,修改oracle 11GR2归档模式和归档目录及大小-Oracle
  6. matlab imcrop 对应python函数_MATLAB车牌识别之7个字符切割浅谈【抽丝剥茧】
  7. vue component created没有触发_详解在Vue中使用TypeScript的一些思考(实践)
  8. mysql如何存json格式_mysql 插数据,存json格式
  9. 内存分配_go内存分配管理
  10. html显示本地磁盘 图片,手把手教你为本地磁盘增添背景图片(图解)