将数组转换成list去实现更多的功能
Arrays.asList©返回一个固定长度的Arraylist集合,这里的ArrayList是Arrays的内部类,不是一个真正的我们理解的ArrayList,在其中有一个被声明为 final 的数组 a ,传入的元素就存入了这个数组。所以返回的ArrayList是固定长度的而不是可以自动扩容的。
注意:
因为 Arrays.asList()返回一个固定长度的Arraylist,如果我们需要去删除/添加元素时候就可以尝试自己去实现,这里有两种方式
第一种方式:
第二种方式
代码实现:这里实现了LeetCode中反转字符串中的元音字符
- Reverse Vowels of a String (Easy)
因为这里不需要对最终的返回的ArrayLIst做什么扩容,所以三种数组转换成list的方式都可以达到目的。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class reverseVowels {
public String reverse(String s){
//对象数组c
Character[] c={'a','e','i','o','u','A','E','I','O','U'};
// Arrays.asList(c)返回一个固定长度的Arraylist集合,这里的ArrayList是Arrays的内部类,不是一个真正的我们理解的ArrayList,在其中有一个被声明为 final 的数组 a ,传入的元素就存入了这个数组。所以返回的ArrayList是固定长度的而不是可以自动扩容的。
List<Character>myChar= Arrays.asList(c);
//我们可以通过自己去实现将字符数组转换成list去使用其他功能eg:myChar.add();
//因为 Arrays.asList(c)返回一个固定长度的Arraylist,如果我们需要去删除/添加元素时候就可以尝试自己去实现
/**
* 第一种方式全部自己实现
*/
/* List<Character> myChar=new ArrayList<>();
for(Character ch:c){
myChar.add(ch);
}*/
/**
* 第二种方式:创建一个真正的ArrayList, 然后将Arrays.asList(c)返回固定长度的Arraylist集合作为参数传递到构造器中
*/
/*List<Character>mychar=new ArrayList<>(Arrays.asList(c));
myChar.add('s');
myChar.remove('s');*/
if(s==null){
return null;
}
int i=0,j=s.length()-1;
//最终输出的结果存放在result数组中
char[] result=new char[s.length()];
while (i<=j){
char ci=s.charAt(i);
char cj=s.charAt(j);
if(!myChar.contains(ci)){
result[i++]=ci;
}else if(!myChar.contains(cj)){
result[j--]=cj;
}else {
result[i++]=cj;
result[j--]=ci;
}
}
return new String(result);
}
//测试代码
public static void main(String[] args) {
String str="leetcode";
reverseVowels r=new reverseVowels();
System.out.println(r.reverse(str));
}
}