利用Arrays.asList()将数组转换成list,实现LeetCode中反转字符串中的元音字符

本文探讨了在Java中将数组转换为List的多种方法,重点介绍了使用Arrays.asList()的特性与限制,以及如何通过自定义实现或利用ArrayList构造器进行更灵活的操作。通过实例演示了在实际编程任务中,如LeetCode的元音字符反转问题,如何选择合适的转换策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将数组转换成list去实现更多的功能

Arrays.asList©返回一个固定长度的Arraylist集合,这里的ArrayList是Arrays的内部类,不是一个真正的我们理解的ArrayList,在其中有一个被声明为 final 的数组 a ,传入的元素就存入了这个数组。所以返回的ArrayList是固定长度的而不是可以自动扩容的。

注意:

在这里插入图片描述

因为 Arrays.asList()返回一个固定长度的Arraylist,如果我们需要去删除/添加元素时候就可以尝试自己去实现,这里有两种方式

第一种方式:

在这里插入图片描述

第二种方式

在这里插入图片描述

代码实现:这里实现了LeetCode中反转字符串中的元音字符

  1. 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));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值