今天刚刚做完一个新需求。碰到对数组去重/删除元素。我觉得这个对大家在以后的开发中很有意义。。也算是一个工具方法。。。废话不多说。直接上代码
首先写一个公共方法。。。。先将数组转化成List;
请看代码
/*数组转化List*/
public static List<String> arrayToList(String[] arr){
List<String> res = new ArrayList<>();
if(null == arr || 0 == arr.length){
return res;
}
for(String str : arr){
res.add(str);
}
return res;
}
这个方法有人会说为啥不用Arrays.asList(arr);这个大家自己去查询为什么不用。。我说结果,返回的ArrayList不是java.util.ArrayList。而是Arrays里面的静态内部类。。而且这个内部类只能读取元素。不能添加/删除元素。。
接下来就是去重/添加/删除元素
/*数组元素去重 --第一种方法*/
public static String[] arrayEliminateDuplication(String[] strs){
if(null == strs || 0 == strs.length){
return null;
}
Set<String> set = new HashSet<>(strs.length);//利用set的不可重复性
for(String st : strs){
set.add(st);
}
return set.toArray(new String[set.size()]);
}
/*数组元素去重 --第二种方法*/
public static String[] arrayEliminateDuplication00(String[] strs){
if(null == strs || 0 == strs.length){
return null;
}
List<String> res = new ArrayList<>(strs.length);
for(String st : strs){
if(!res.contains(st)){//数组中是否有相同元素
res.add(st);
}
}
return res.toArray(new String[res.size()]);
}
/*删除数组中的元素*/
public static String[] deleteArrayElement(String[] arr,String str){
if(null == str ){//元素为null
if(null == arr || 0 == arr.length){//数组为空
return null;
}else{
return arr;
}
}else{//元素不为null
if(null == arr || 0 == arr.length){//数组为空
return null;
}
}
/*先将元素转换成List*/
List<String> res = new ArrayList<>(arr.length);
for(String st : arr){
if(!res.contains(st)){
res.add(st);
}
}
if(res.contains(str)){//集合中存在要删除的元素就删除 ,不存在钙元素就不操作
res.remove(str);
}
return res.toArray(new String[res.size()]);
}
/*数组中添加元素*/
public static String[] addArrayElement(String[] arr,String element){
if(null == arr || 0 == arr.length){
return null;
}
List<String> list = arrayToList(arr);
list.add( element);
return list.toArray(new String [list.size()]);
}
/*数组中指定位置添加元素*/
public static String[] designatedLocationAddArrayElement(String[] arr,int index,String element){
if(null == arr || 0 == arr.length){
return null;
}
int size = arr.length-1;//数组的最大下标
if(0<=index && index<=size){//添加位置在下标范围内
List<String> list = arrayToList(arr);
list.add(index, element);
return list.toArray(new String [list.size()]);
}else{
return arr;
}
}
注:在返回数组的时候。我直接用了List.toArray(new String[size]) 和Set.toArray(new String[size])的方法。。因为返回的数组的长度是固定的。不像返回的集合List/Set ,如果用了Arrays里的asList方法。就会导致返回的集合只能读取,不能添加/删除。。
这些方法我已经测试合格。。有哪些不好的地方请指教。。谢谢!