如题,源码为:
复制代码报错为:
复制代码有没有大佬知道是怎么回事啊
- import com.sun.deploy.util.StringUtils;
 
 
- import java.util.Arrays;
 
- import java.util.List;
 
 
- public class test {
 
-     public static void main(String[] args) {
 
-         String[] a = {"1", "say", "1"};
 
-         List a1 = Arrays.asList(args);
 
-         a1.remove(0);
 
-         String content = StringUtils.join(a1, " ");
 
-         System.out.println(content);
 
-     }
 
- }
 
- Exception in thread "main" java.lang.UnsupportedOperationException
 
-         at java.util.AbstractList.remove(AbstractList.java:161)
 
- at test.main(test.java:11)
Arrays.asList 返回的 List 不支持增删操作
美味的曲奇 发表于 2022-7-24 17:17
Arrays.asList 返回的 List 不支持增删操作
如果我想删除一个数组中的一个元素,还有其他方法吗?
 本帖最后由 美味的曲奇 于 2022-7-24 17:24 编辑 
数组(Array)是定长的,不存在remove操作 只能根据下标 set null
动态增减使用List,Set等集合而非Array
lzy20488402 发表于 2022-7-24 17:19
如果我想删除一个数组中的一个元素,还有其他方法吗?
数组(Array)是定长的,不存在remove操作 只能根据下标 set null
动态增减使用List,Set等集合而非Array
美味的曲奇 发表于 2022-7-24 17:21
数组(Array)是定长的,不存在remove操作 只能根据下标 set null
动态增减使用List,Set等集合而非Array ...
我的插件源代码是想在玩家使用/r 玩家名 信息来私聊一个玩家,因为不确定玩家是否会打空格而造成指令信息不完整,所以想把除掉玩家名的剩余部分用空格连接成字符串,然后再发送
如果把args中的玩家名改为null,可以让StringUtils.join(args, " ")指令忽略他吗?
lzy20488402 发表于 2022-7-24 17:31
我的插件源代码是想在玩家使用/r 玩家名 信息来私聊一个玩家,因为不确定玩家是否会打空格而造成指令信息 ...
new ArrayList<>(Arrays.asList()) 或许对你有帮助
那你可以改成List<String> a1 = new ArrayList<>(Arrays.asList(a))
肥洋洋 发表于 2022-7-24 17:38
new ArrayList(Arrays.asList()) 或许对你有帮助
否 Guava的Lists.newArrayList(arr)是最优解
学Java就是要边写边学的,能在学习中发现问题值得赞赏。
但是遇到崩溃时,我认为应该去顺藤摸瓜,看一下Arrays.asList()生成的是什么牛蛇鬼神。
事实证明,Arrays.asList生成的是java.util.Arrays$ArrayList,不是你想要的java.util.ArrayList。前者没有重写AbstractList.remove方法,而AbstractList.remove会扔UnsupportedOperationException,所有的报错都是有依据的。
但是遇到崩溃时,我认为应该去顺藤摸瓜,看一下Arrays.asList()生成的是什么牛蛇鬼神。
事实证明,Arrays.asList生成的是java.util.Arrays$ArrayList,不是你想要的java.util.ArrayList。前者没有重写AbstractList.remove方法,而AbstractList.remove会扔UnsupportedOperationException,所有的报错都是有依据的。
肥洋洋 发表于 2022-7-25 10:56
这个也要比吗?
其实都差不多啦,如果是Array2List我习惯这么做,一步到位
帖子内容我理解,Arrays$ArrayList和ArrayList是俩东西,前者是不可变的,要转成可变的;或者一步到位直接把Array灌进ArrayList里。性能差异不会特别大,个人喜好问题啦
将a1改为String类型应该OK
不妨试试:
StringUtils.join(Arrays asList(args).subList(1))
StringUtils.join(Arrays asList(args).subList(1))
teddyxlandlee 发表于 2022-7-27 14:05
不妨试试:
StringUtils.join(Arrays asList(args).subList(1))
sublist有两个参数
洞穴夜莺 发表于 2022-7-27 14:21
sublist有两个参数
那么第二个参数就是args.length
Arrays.asList转成的是只读列表,请用Lists.newArrayList代替
 
 
