zoukankan      html  css  js  c++  java
  • 枚举

    声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂 旨在促进VIP学员互相学习的基础上公开笔记。

    集合框架

    1.枚举

    枚举也是在JDK1.5以后才出现的,泛型主要解决的是说明一个集合里面存储的是什么类型的对象的。那枚举是用来干啥的呢?

    枚举在java中是专门用来做选择的。先建好maven环境:

    image

    配置好的环境如上,我们回想一下Calendar类下的get方法,它的参数是int field,其实本意是要我们传入年、月、日、时、分、秒这些参数从而来得到对应的值的,但是它的参数的变量名field并没有描述清楚这个参数到底该传什么样的值的,像这种整形的参数变量,描述含义不清楚的(不是weight、height、length之类的含义清晰的变量),我们不知道该传入什么样的参数值的时候,通常可以通过看这个类中定义了哪些常量,然后把类中定义的常量(常量标示符表示某个int数值)作为参数值传入,比如这里的get方法,就可以传入Calendar.YEAR这样的常量值,来得到年份。

    image

    但是最开始的时候我们并不知道这种int field的参数就应该传入类中定义的常量标示符的,那么java中就推出了枚举来解决这个问题。

    枚举是一个选择器,比如你的方法的参数类型要限定在A/B/C/D/E/F这六个对象之间,你就可以定义一个枚举选择器Type,把A/B/C/D/E/F六个对象写进来,然后在方法中的参数写成Type t,当使用方法的时候,一点到t上面就会知道这个参数是一个枚举,同时知道了参数类型是在什么之间做选择。如下:

    image

    image

    如上,使用枚举你就能很清楚的知道该传入的参数在哪些对象之间做选择,相反你如果写int,同时变量名的表义又不清楚的话,是无法知道该传入什么样的参数值的。

    image

    那么我们方法的参数是枚举的方法,我们就可以在方法里面做一些选择的逻辑处理:

    image

    image

    枚举里面既可以写构造器也可以写方法,构造器必须是私有的,但是在枚举里面写构造器和方法都是没有实际意义的:

    image

    补充一个泛型的循环:

    image

    这里的for-each循环实际上也就是迭代器做出来的。 Collections集合工具类:

    认识一下JDK API?

    什么是API,就是java里面所有官方公布的操作类,和这些类里面的方法,和一些简单的小案例,是一个帮助、说明文档。

    image

    网上在线中文API ,百度输入 JDK API

    通常情况下拿API 来是为了看某个操作类下的一些方法,看它们是怎么使用的,用来完成什么样的功能的。

    Collections集合工具类:

    Collections集合工具类里面的方法大部分都是针对List集合进行相应功能操作的:

    1.混合打乱Collections.shuffle(List l);

    image

    这种打乱方法,每次运行产生的结果都是不一样的。 排序方法Collections.sort(List l):

    image

    image

    其实,上面的String为啥能够直接进行排序,是有原因的,那是因为String里面实现了Comparable接口里面的CompareTo方法,所以才能够直接进行排序,我们自己定义一个student类,看看能否直接排序?

    image

    image

    我们自己写的类Student,最开始没有实现Comparable接口,在使用sort方法来比较不同的student对象的时候会报错,这是肯定的,因为你没有实现Comparable的接口,它不知道按照什么东西来进行比较,然后我们去实现Comparable接口:

    image

    image

    如上所示,我们的student类实现了Comparable接口后,重写了compareTo方法,然后就可以使用sort方法来进行直接排序了。

    Collections.addAll批量的加入数据:

    image

    Collections.replaceAll()替换集合里面的数据:

    image

    Collections.binarySearch()搜索对象在哪个下标下:

    image

    Collections.reverse()反转,将集合里面的对象反转过来:

    image

    Collections.fill()全部替换,将集合里面的对象全部替换为某个对象:

    image

    Collections.copy()拷贝,将一个集合的数据拷贝到另一个集合中,目标集合的长度至少要比源集合的长度长,不然会报错。如果源集合长度比目标集合长度短,则源集合里面的数据会覆盖目标集合里面前面部分的数据:

    image

    还有很多方法,以后要用的时候可以参考JDK API文档进行查询。

    Map集合:双列集合,一个主键一个值。又称之为键值对集合,一个key 一个value。

    image

    键值对集合,键不可以重复,值可以重复,因为我们的拿值、查值、删值都是根据主键来进行的,如果你两个或多个主键相同的话,就无法进行拿值、查值、删值等操作了。

    image

    Map集合的结构:下面有HashMap和Hashtable两个集合,Map集合里面的主要方法如上: HashMap集合继承于AbstractMap,然后AbstractMap实现了Map接口。 HashMap是非线程安全的,Hashtable是线程安全的。

    image

    image

    image

    HashMap的方法和Hashtable的方法是几乎一样的,只要看看HashMap里面的方法:

    image

    image

    由上所示,当多个主键一样的时候,你去拿值的话,拿的是最后一个。

    image

    image

    Hashtable的主键和值都不能是null。

    image

    而HashMap的主键或者值都可以是null。

    拿出集合中的所有值,用到方法values(),返回值是一个Collection集合对象,然后用for-each循环把Collection集合里面的【学Java,到凯哥学堂kaige123.com】所有数据拿出来,这里如果是HashMap集合的话,拿出来的数据是杂乱无序的,而如果是Hashtable的话,拿出来的数据是有顺序的:

    image

    image

    取出集合里面所有的键,用方法keySet(),这个方法的返回值是Set集合对象,然后使用for-each循环把Set集合里面的所有数据都取出来。

    image

    image

    如上显示,用HashMap的话取出来的键是杂乱无序的,而Hashtable取出来的键是有序的。 键-值一起拿方法entrySet(),它的返回值是一个Set,Set集合里面存放的是Entry<String,String>实体,然后用for-each循环把集合里面所有的实体对象数据Entry<String,String>拿出来:

    image

    image

    如上所示,HashMap拿出的键-值对无序,而Hashtable拿出来的有序。

    image

    还有size()、remove()、containsKey()、containsValue()、clear()等方法,使用如上。

  • 相关阅读:
    6-Python爬虫-分布式爬虫/Redis
    ES 查询时 排序报错(fielddata is disabled on text fileds by default ... )解决方法
    Intellij Idea webstorm 激活
    Intellij Idea 配置jdk
    java 获取(格式化)日期格式
    js 跳转 XSS漏洞 预防
    CSS去掉背景颜色
    js对象无法当成参数传递 解决方法
    Elasticsearch java api
    java多条件查询SQL语句拼接的小技巧
  • 原文地址:https://www.cnblogs.com/kaigexuetang/p/7411900.html
Copyright © 2011-2022 走看看