Collections工具类和Arrays工具类
程序员文章站
2022-07-14 23:37:52
...
一. Collections工具类
Collections工具类:是集合框架中的用于操作集合对象(任意集合均可)的工具类。都是静态的工具方法。
- max():
public static void main(String[] args) {
//获取最大值
Collection<String> c=new ArrayList<String>();
c.add("hash");
c.add("wewfw");
c.add("zz");
c.add("asdd");
String s=Collections.max(c);
System.out.println(s);
}
创建集合的时候可以传比较器,按比较器的比较方式比较:
public static void main(String[] args) {
//获取最大值
Collection<String> c=new ArrayList<String>();
c.add("hash");
c.add("wewfw");
c.add("zz");
c.add("asdd");
String s=Collections.max(c,new Comparator<String>() //传入比较器
{
public int compare(String s1, String s2)
{
int temp=s1.length()-s2.length();
return temp==0? s1.compareTo(s2):temp;
}
});
System.out.println(s);
}
- revereOrder(比较器):返回一个比较器,强行逆转指定比较器的顺序。
比如自定义一个比较器是从长到短来排序的,我如果有从短到长的需求,我不需要在写一个从短到长的比较器,我可以使用该方法,将比较器作为参数传入。
//比较器,从短到长
import java.util.Comparator;
public class CompareByLength implements Comparator<String> {
public int compare(String s1, String s2) {
int temp=s1.length()-s2.length();
return temp==0? s1.compareTo(s2):temp;
}
}
import java.util.*;
public class Demo {
public static void main(String[] args) {
List<String> c=new ArrayList<String>();
c.add("hash");
c.add("wewfw");
c.add("zz");
c.add("asdd");
Collections.sort(c,Collections.reverseOrder(new CompareByLength()));//从长到短
System.out.println(c);
}
}
结果:[wewfw, hash, asdd, zz]
-
sort():排序
无重复元素的集合+排序——>TreeSet.
有重复元素+排序————>Collections.sort(List).(还可以有第二个参数比较器,如果不传则自然排序。) -
XXX synchronizedXXX(XXX):返回指定集合支持的同步集合。
并发访问的容器一定要加这个。
二.Arrays工具类
Arrays工具类:用于操作数组的工具类。类中定义的都是静态方法。
- 对数组排序。
- 二分查找。
- 数组复制
- 对两个数组进行元素的比较,判断两个数组是否相同。
- fill()填充。
- 将数组转成字符串。
- asList():将数组转成固定长度的集合。
数组转集合的目的:集合中有很多方法便于使用。
但是不要使用增删等改变长度的方法,如使用add,remove会报错。
import java.util.*;
public class Demo1 {
public static void main(String[] args) {
//asList数组转成集合
String[] str= {"hjg","hyhy","yit"};
List<String> list=Arrays.asList(str);
//list.add("H");报错
System.out.println(list.contains("yit"));
}
}
如果数组中存储的是基本数据类型,转集合的话,数组对象会作为集合中的元素存在;
如果数组中存储的是引用数据类型(即类,接口,数组)时,转集合的话,数组元素会作为集合元素存在。
public static void main(String[] args) {
int[] a= {2,32,435};
List list=Arrays.asList(a);
System.out.println(a);//输出:[[email protected]
}
public static void main(String[] args) {
Integer[] a= {2,32,435};
List<Integer> list=Arrays.asList(a);
System.out.println(list);//输出:[2, 32, 435]
}
既然有数组转集合,那么就不得不谈谈集合转数组。Collection类里的toArray():集合转数组。目的: 为了限制对元素的增删操作。
如果传递的数组的长度小于集合长度,会创建一个同类型的数组长度,该长度为集合的长度;
如果传递的数组的长度大于集合长度,就会使用这个数组,没有存储元素的位置为null。
所以数组的长度最近定义和集合长度一致。可以用size得到集合的长度。
public static void main(String[] args) {
Collection<String> c=new ArrayList<String>();
c.add("A");
c.add("wef");
c.add("regiom");
String[] str1=c.toArray(new String[1]);
System.out.println(Arrays.toString(str1));//输出:[A, wef, regiom]
String[] str2=c.toArray(new String[5]);
System.out.println(Arrays.toString(str2));//输出:[A, wef, regiom,null,null]
String[] str1=c.toArray(new String[c.size()]);
System.out.println(Arrays.toString(str1));//输出:[A, wef, regiom]
}