【问题标题】:arrayList/vector add element at position , methodarrayList/vector 在位置添加元素,方法
【发布时间】:2012-02-11 01:10:18
【问题描述】:

我正在尝试做类似的事情:

 ArrayList<String> al = new ArrayList(15);
 al.add(5, "test");

我的情况是矢量,但没关系。我错过了一些琐碎的事情。

但是我得到了 index out of bound 异常。

方法api说明:

“在此列表中的指定位置插入指定元素。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将它们的索引加一)。” - 所以?

我的情况是我得到UDP数据包并尝试根据标题序列号将它们的数据放入结构中。

更新:.set 也是如此

【问题讨论】:

  • 您能解释一下您遇到的行为吗?很难理解你的问题。 “我用向量的情况,但没关系。我错过了一些微不足道的东西。”
  • 因为向量 .add 和 .set 方法与 arrayList 具有相同的行为。无论如何,我得到了预期的答案。

标签: java add


【解决方案1】:

对于初学者来说,ArrayList 的构造函数是令人困惑的。 放

 new ArrayList(15);

基本上只是预先对您的程序进行优化。 ArrayList 类基本上只是一个原生 Java 数组的包装器。在这个例子中,实际的内部数组将由 15 个元素创建。当你放的更多时,ArrayList 类只会创建一个更大的数组并复制原始数组中的内容。设置初始容量通常没有意义。我只在从一开始就知道我将在 ArrayList 中记录大量元素(比如一百万)时才使用它。

我知道,这种行为非常令人困惑,尤其是如果您来自 PHP 之类的语言,您可以这样做:

al[] = Array();
al[15] = "I am a fifteen year old UDP package";

基本上,add(index, element) 方法只适用于您有一个包含多个 index 元素的 ArrayList,将新元素挤入 index-1 之后。

解决办法:

如果您知道最多将接收 15 个元素,则可以像这样使用普通的 数组:

String[] al = new String[15];
al[5] = "Tralala";

如果您不知道元素的数量,我会将它们存储在 List 中,并在收到所有包裹后对该列表进行排序。

【讨论】:

  • 正如@mark-byers 的回答中所述,ArrayList 仍然必须是连续的。
  • 谢谢,不幸的是,他删除了他对我的回复感到不安的答案,尽管我建议将其从评论移到答案。无论如何,我明白这一点。
  • 哦,是的,它消失了。当我不知道会有多少元素时,@mark-byers 建议的 SortedList 仍然是我要走的路。另外:对有用的答案投反对票是不好的...... :)
【解决方案2】:

构造函数接受容量,而不是大小。您只能在小于或等于 ArrayList 大小(在本例中为零)的索引处添加元素。

以下是创建具有 15 个元素的 ArrayList 的解决方法:

ArrayList<String> al = new ArrayList<String>(Arrays.asList(new String[15]));

【讨论】:

  • @allesblinkt:我知道这并不优雅,但这是我知道的唯一一种在没有循环的情况下制作一定大小的 ArrayList 的方法(也不是那么优雅)。
  • 我知道你知道。我真的很想自己回答这样的问题。
【解决方案3】:
ArrayList<String> a = new ArrayList<String>();
int size = a.size();
if(5 < size){
    a.add(5,"Hello");
}else{
    System.out.println("Index not present as size is less");
}

或者在创建集合时,您可以提及大小,如

ArrayList<String> a = new ArrayList<String>(10);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2014-05-06
    相关资源
    最近更新 更多