既然集合很常用,那么肯定就会有相应的工具类,可以直接使用,就不用那么累了,对吧,哈哈。集合也有自己的工具类,那就是:Collections。看清楚,这是带有s的,不是Collection接口。
既然是工具类,那么就来看看这个工具类里面有什么方法是我们经常用到的?
接下来就来看一下上面的方法怎么用?
1、排序
这是最基本的排序方式,也就是自然排序,我们也可以传入一个自定义的Comparator 对其进行排序。
这个和上面那个没什么区别,只是sort方法中多传递了一个比较器对其进行排序,排序的依据是根据字符串的长度进行排序,短的排前面,长的排后面。
这个就是刚才的比较器。
2、交换,swap
看结果,红色框中的两个元素的位置是不是互换了
3、取最大,max
上面的注释写错,应该是最大的元素,而不是最大的元素的角标。(最前面那张图的注释有误)
有max肯定就还有min,min就不再演示了。
4、二分查找
有一点需要说明的是:二分查找必须要先对其进行排序,否则是没法找出来或者找出来的是不正确的。
第一行打印的是原集合,第二行打印的是排序后的集合,第三行打印的是该元素的序号,第几位。最后一行打印出来的是-6,这个要特别说明一下的,当打印出来的是负数的时候,说明这个元素在这个集合中不存在。
5、填充。fill
这个方法也很简单,不用过多的解释了,就是将所有的元素替换成指定的元素。
6、反转 reverseOrder
反转其实是将比较器进行反转,例如前面的例子中的按照字符串的长度的升序排序的,现在要变成降序了,我们就不用再去写多一个比较器了,可以直接用升序的这个比较器去反转,然后传入反转的这个比较器就可以了。
看打印出来的,第一行是原集合,第二行是根据我写的按照字符串长度排序的比较器对其进行比较的结果,第三行打印的是我们利用反转回来的比较器对其进行比较的结果。
7、synchronizedList、
同步,同步没什么好讲的,就是传入一个不同步的集合,给回一个同步的集合给你,这里大家可以去看看它的源码,源码没什么,就是把现有的集合里面的方法封装在了同步代码块中,有兴趣的可以去看源码。
8、shuffle、随机
我们直接看打印出来的两个list,第二个是不是重新的随机摆放了一下,是的,其实这只是用默认的随机排列方式,我们也可以自己写一个Random对其进行随机排列。
Collections就讲到这里。
再来说几个比较重要的:
数组变集合:
看到没,数组是不是变成了集合,是不是很好玩呢?对吧,其实一点都不好玩。
数组变集合,需要注意的是:我们通过数组转换成的集合,不能对该集合做增删操作,因为数组的长度是固定的,所以不能对其做改变其结构的操作,增删就是对其的结构进行了改变,我们可以做get,contains等操作。
那为什么要转换成集合呢?
要判断某个元素是否在数组中,就不用去遍历数据了,直接使用集合的Contains方法。是不是方便很多;
数组变集合还有一个比较重要的是:基本的数据类型不能直接使用:看代码:
像这个数组,就不能再用 int ,只能用 Integer
集合变数组:
集合变数组就简单啦。直接调用集合的toArray() 方法即可;
但有一点需要注意的是:我们在转换成数组的时候,还可以使用这个方法的重载方法,也就是传入一个指定数组。这里需要注意的是,如果集合的长度大于数组的长度,那么就会丢失数据,如果集合长度小于数组的长度,那么就会使后面的数据全部为空。
另一种遍历集合的方式:for each
这是一种增强型for循环。在我们日常编程中,很常用,很常用,很常用!