lzy20488402
如题,源码为:
  1. import com.sun.deploy.util.StringUtils;

  2. import java.util.Arrays;
  3. import java.util.List;

  4. public class test {
  5.     public static void main(String[] args) {
  6.         String[] a = {"1", "say", "1"};
  7.         List a1 = Arrays.asList(args);
  8.         a1.remove(0);
  9.         String content = StringUtils.join(a1, " ");
  10.         System.out.println(content);
  11.     }
  12. }
复制代码
报错为:
  1. Exception in thread "main" java.lang.UnsupportedOperationException
  2.         at java.util.AbstractList.remove(AbstractList.java:161)
  3.         at test.main(test.java:11)
复制代码
有没有大佬知道是怎么回事啊

美味的曲奇
Arrays.asList 返回的 List 不支持增删操作

lzy20488402
美味的曲奇 发表于 2022-7-24 17:17
Arrays.asList 返回的 List 不支持增删操作

如果我想删除一个数组中的一个元素,还有其他方法吗?

美味的曲奇
本帖最后由 美味的曲奇 于 2022-7-24 17:24 编辑
lzy20488402 发表于 2022-7-24 17:19
如果我想删除一个数组中的一个元素,还有其他方法吗?

数组(Array)是定长的,不存在remove操作 只能根据下标 set null
动态增减使用List,Set等集合而非Array

lzy20488402
美味的曲奇 发表于 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()) 或许对你有帮助

美味的曲奇
lzy20488402 发表于 2022-7-24 17:31
我的插件源代码是想在玩家使用/r 玩家名 信息来私聊一个玩家,因为不确定玩家是否会打空格而造成指令信息 ...




通过数组下标选取

洞穴夜莺
那你可以改成List<String> a1 = new ArrayList<>(Arrays.asList(a))

teddyxlandlee
肥洋洋 发表于 2022-7-24 17:38
new ArrayList(Arrays.asList()) 或许对你有帮助

否 Guava的Lists.newArrayList(arr)是最优解

teddyxlandlee
学Java就是要边写边学的,能在学习中发现问题值得赞赏。
但是遇到崩溃时,我认为应该去顺藤摸瓜,看一下Arrays.asList()生成的是什么牛蛇鬼神。
事实证明,Arrays.asList生成的是java.util.Arrays$ArrayList,不是你想要的java.util.ArrayList。前者没有重写AbstractList.remove方法,而AbstractList.remove会扔UnsupportedOperationException,所有的报错都是有依据的。

美味的曲奇
teddyxlandlee 发表于 2022-7-25 10:40
否 Guava的Lists.newArrayList(arr)是最优解

仔细理解一下帖子,这是何不食肉糜的最好解释

肥洋洋
teddyxlandlee 发表于 2022-7-25 10:40
否 Guava的Lists.newArrayList(arr)是最优解

这个也要比吗?

黎子柒
lzy20488402 发表于 2022-7-24 17:31
我的插件源代码是想在玩家使用/r 玩家名 信息来私聊一个玩家,因为不确定玩家是否会打空格而造成指令信息 ...


你说的是这样子?

teddyxlandlee

其实都差不多啦,如果是Array2List我习惯这么做,一步到位
帖子内容我理解,Arrays$ArrayList和ArrayList是俩东西,前者是不可变的,要转成可变的;或者一步到位直接把Array灌进ArrayList里。性能差异不会特别大,个人喜好问题啦

李虹鲛
将a1改为String类型应该OK

teddyxlandlee
不妨试试:
StringUtils.join(Arrays asList(args).subList(1))

洞穴夜莺
teddyxlandlee 发表于 2022-7-27 14:05
不妨试试:
StringUtils.join(Arrays asList(args).subList(1))

sublist有两个参数

teddyxlandlee
洞穴夜莺 发表于 2022-7-27 14:21
sublist有两个参数

那么第二个参数就是args.length

吕易天
Arrays.asList转成的是只读列表,请用Lists.newArrayList代替