【问题标题】:Is it possible to rename an ArrayList? [closed]是否可以重命名 ArrayList? [关闭]
【发布时间】:2014-02-18 13:32:43
【问题描述】:

我只是想知道是否有办法重命名分配给 ArrayList 的变量...或者如果我只需要创建另一个,只需使其完全相同。

【问题讨论】:

  • 我不认为可以重命名变量,但就像你说的,可以将它复制到另一个变量。
  • 重命名当前变量有什么问题?如果是您的代码,您应该可以随意命名变量。
  • 听起来像是 XY 问题的一个实例... (meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - 你想达到什么目的?
  • 只需创建一个新变量。但是,我不确定为什么您的数组列表的命名会真正“重要”到在执行期间必须重命名它......
  • 无法在运行时重命名变量。您可以做的是使用 IDE 重构工具重命名变量(包括更新使用它的代码位置)。你想达到什么目的?

标签: java arraylist


【解决方案1】:

只需使用您想要的名称创建一个新引用并从旧引用中分配它:

ArrayList original = ...;
ArrayList newList = original;

我应该指出,由于 ArrayList 是一个引用类型,所以 original 和 newList 都指向内存中的相同数据。如果您将一个项目添加到 original 或 newList,它将同时影响两者。它不会创建 ArrayList 的第二个副本。不过,要理解您的要求有点困难。

如果您正在谈论重构代码以在整个应用程序中重命名变量,那么这在某种程度上取决于您使用的 IDE,但任何好的 IDE 都将具有此功能。

【讨论】:

  • 如果您想使用newList 而不是original,那么这就是要走的路!但是,如果您想使用newList,同时继续以不同的方式使用original,那么您的newList 应该是original 的真实副本,而不仅仅是复制参考(如此处)跨度>
【解决方案2】:

首先,我想指出,“重命名”变量并不是一个与更改“reference”或“identifier”的工作方式有任何相似之处的概念。您无法更改变量标识符(有点像变量的名称),但您可以将变量的值传递给具有不同标识符的另一个变量。

当变量引用ObjectObject 类的子类(例如ArrayList)时,您的引用类型变量会保存指示该对象在内存中的位置的数据。因此,将该引用的数据传递给另一个引用仅意味着现在有两个 Object 引用“引用”内存中的同一个对象。

从技术上讲,如果您想为该对象指定一个名称,以便以后用来识别它,可以通过创建一个扩展 ArrayList(或任何对象)的自定义类来实现。例如;

public class NamedArrayList extends ArrayList{

    private String listName = "default_name";

    public String getListName(){
        return listName;
    }

    public void setListName(String listName){
        this.listName = listName;
    }
}

或者,您可以创建一个 Wrapper 类,该类包含一个 ArrayList 以及用于识别它的名称。如果最后一部分有点偏离主题,我深表歉意,但我希望它有所帮助。

【讨论】:

    【解决方案3】:

    你可以试试这个

    List<Double> original =new ArrayList<Double>();
    List<Double> copy = new ArrayList<Double>(original);
    

    【讨论】:

      【解决方案4】:

      程序运行时您不能重命名任何变量。

      但你可以在开发时重命名它。然后编译运行。

      【讨论】:

        【解决方案5】:

        如果您的意思是使用不同的引用重命名而不是简单地做

        ArrayList newListRef = oldListInstance;
        //use newListRef thereafter
        

        如果你的意思是改变一些保留顺序的元素那么 -

        ArrayList 的大小是动态的。您可以在保留的特定索引和排序中添加和删除元素。所以不需要创建单独的列表。如果您想更改特定元素,只需将其删除并在该索引处添加新元素。

        API

        public E remove(int index)
        public void add(int index, E element)
        

        【讨论】:

        • 不是我反对,但似乎这个问题是关于用于保存 ArrayList 的变量名,如List variableName = new ArrayList(),而不是关于如何更改列表的内容。
        猜你喜欢
        • 2012-06-01
        • 2013-02-22
        • 2020-07-04
        • 2023-04-10
        • 2021-01-08
        • 2010-11-23
        • 2016-08-09
        • 2012-08-30
        • 1970-01-01
        相关资源
        最近更新 更多