-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()等方法,使用如上。

猜你喜欢

转载自l4432848.iteye.com/blog/2390679
今日推荐