【问题标题】:How to add an element to an ArrayList如何将元素添加到 ArrayList
【发布时间】:2015-05-14 07:40:20
【问题描述】:

如何让用户输入一个数字,然后将数组向右移动 1。数组不能超过 50。请帮助,提前谢谢:)

  List<Integer> list = new ArrayList<Integer>(1);
    public void add(int value) {

      list.add(0, value);
      for(int i = 0; i < array.length; i++) {
         list.add(index, value); // how to make the elements shift to the right?
         if(list.size > 50) {
           list.remove(50);
          }
       }
    }

【问题讨论】:

  • 为什么要添加到列表中间?
  • 我如何在列表中间添加?
  • 数组 != ArrayList
  • index 定义在哪里?
  • 您是否有任何特定的原因想要购买阵列。看来java.util.LinkedList对你来说是一个更好的选择,将元素添加到头部addFirst()

标签: java arrays methods


【解决方案1】:
 List<Integer> list = new ArrayList<Integer>(50);

  public void add(int value) {
     if (list.size() == 50)
         list.remove(list.size() -1);

     list.add(value);
  }

【讨论】:

  • 谢谢!!你也知道我怎样才能得到列表的最后一个值。例如,如果 50 大小的列表中有 11 个元素。我如何获得第 11 个元素的值?
  • list.size() -1 为您提供最后一个元素的索引。
  • 您知道您在 ArrayList 的末尾添加新元素,对吧?不像 OP 要求的那样在开始时。
【解决方案2】:

ArrayList 为你移动元素,这就是为什么它有index,look at this answer。

创建ArrayList时:new ArrayList&lt;Integer&gt;(50)50不要定义size,定义ArrayList的capacity。创建时为空,大小为0。

List<Integer> list = new ArrayList<Integer>(50);


public void add(int value) {
  if (list.size <= 50) list.remove(list.size() - 1);

  // inserting element at position 0 shifts other elements
  list.add(0, value);

}

【讨论】:

  • 你不懂构造函数参数initialCapacity。你之前是对的。
  • 哇,真的吗?有那么容易吗?想到了这一点,但我肯定它有点难
  • 如果他使用数组而不是集合作为List,他应该手动处理。
  • ArrayLists 变大了,这就是问题所在,参数50 只是初始大小。
  • 您将大小设置为 50,但在某些时候此数组列表将包含 51(在删除之前)。因此它必须调整大小,所以你试图提高效率,但它弊大于利。
【解决方案3】:
public class TestList {
   public static void main(String[] args) {

   ArrayList<Integer> arrlist = new ArrayList<Integer>(4);

   // use add() method to add elements in the list
   arrlist.add(15);
   arrlist.add(4);
   arrlist.add(5);

   // adding element 25 at third position
   arrlist.add(2,25);

   for (Integer number : arrlist) {
   System.out.println("List Value = " + number);
   }  
   }
}

【讨论】:

  • 你知道如何获取列表的最后一个值吗?例如,如果 50 大小的列表中有 11 个元素。我如何获得第 11 个元素的值?
  • @BriannaXD size() 的列表给你元素的数量;由于索引从 0 开始,您可以 listName.get(listName.size() - 1) 获取存储在列表 listName 中的最后一个值。你可以问 StackOverflow:[stackoverflow.com/a/687842/5108777]
【解决方案4】:

在此列表中的指定位置插入指定元素。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将它们的索引加一)。从这个“http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html”

所以你只需要检查列表的大小是否不超过 50,并在指定的索引中添加数字。

List<Integer> list = new ArrayList<Integer>(50);

  public void add(int value) {

     if (list.size() == 50) // if the size of the array is 50, then remove the last value.
     list.remove(list.size() -1);

     list.add(int index, E element);// you can even choose where position to insert your value.
  }

【讨论】:

    【解决方案5】:

    在构造函数部分你定义的是容量。默认的最小容量是 10。你知道你的数组不能超过 50。有可能元素必须少于 50。所以首先保持构造函数部分为空。

    List<Integer> list = new ArrayList<Integer>();
        public void add(int value) {
            if(list.size() <50)
                list.add(0,value);
                else
                {
                    list.remove(list.size()-1);
                    list.add(0, value);
                }
    

    【讨论】:

      【解决方案6】:
      private List<Integer> list = new ArrayList<Integer>(51);
      
      public void add(int value) {
        list.add(0, value); //other elements are shifted right, you need do nothing else
      
        //then limit the list to 50 elements
        while(list.size() > 50) list.remove(list.size() - 1);
      }
      

      我看不到其余的代码。我不知道add 之前的列表长度是多少,所以我只是用while 保证它是&lt;= 50。

      您可以指定初始容量,如果这样做,请使用51 而不是50。它为数组提供了一个初始大小,可以容纳您的50,加上在删除前的短时间内列表中的第 51 个。

      【讨论】:

      • 为什么要过一段时间?如果您认为有更多元素,请使用removeRange 否?
      • @JordiCastilla 因为我看不到其余的代码。我不知道add 之前的列表长度是多少,所以我只是保证它是
      • 为什么不删除范围?你也不应该定义容量来减少内存使用吗?
      • @JordiCastilla 因为removeRange 是protected。所以我必须继承ArrayList。
      • list.get(list.size()-1) 因为size() 是列表中元素的实际数量,而不是当前容量。
      猜你喜欢
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多