【问题标题】:Getting objects in linked lists vs. arrays in java获取链表中的对象与 java 中的数组
【发布时间】:2011-10-23 22:12:42
【问题描述】:

好的,所以这可能是一个非常初学者的问题,但是......

现在我有一个名为 Person 的对象,上面有一个名为 setName 的方法

我在我的主班,我已经宣布

List People = new LinkedList();

我要做的只是简单地调用第一个位置的对象的setName函数。 我发现在与一系列人员一起工作时,这很容易做到。我只会说

People[0].setName("steve");

但由于它在链表中,我遇到了麻烦。

我尝试过像这样使用“get”方法...

People.get(0)

但是它不允许我使用我的用户定义的方法,所以我不能设置名称。

从链表中取出对象并访问其方法和实例变量的最佳方法是什么?

提前致谢

【问题讨论】:

    标签: java arrays object linked-list


    【解决方案1】:

    您想使用泛型使其成为人员列表:

    List<Person> People = new LinkedList<Person>();
    
    People.get(0).setName("steve");
    

    【讨论】:

    • 令人困惑的名字,但是......是的,泛型是门票。
    【解决方案2】:

    使用generics:

    List<Person> people = new LinkedList<Person>();
    // …
    people.get(0).setName("steve");
    

    【讨论】:

      【解决方案3】:

      您应该使用泛型:List&lt;Person&gt;。然后你就可以使用people.get(0).setName(..)

      请注意,Java 命名约定要求您的变量为小写。

      【讨论】:

        【解决方案4】:

        您没有设置存储的对象类型。所以你需要向上转型:

        Person person = (Person)People.get(0);
        person.setName("steve");
        

        或设置存储对象的类型:

        List<Person> people = new LinkedList<Person>();
        

        【讨论】:

          【解决方案5】:

          LinkedList 仅在您想要快速迭代列表以及想要快速到达第一个或最后一个元素时才有效。此外,您需要将 people 正确定义为 LinkedList 才能访问链表方法,并且您应该输入您的列表,所以:

          LinkedList<Person> people = new LinkedList<Person>();
          people.getFirst().setName();
          

          但是,ArrayList 是一个更好的通用选择,它在通过索引访问元素时提供了良好的性能,因此:

          List<Person> people = new ArrayList<Person>();
          

          然后

          people.get(0).setName("fred");
          

          【讨论】:

          • LinkedList 在列表中间插入和删除元素的速度也更快。
          【解决方案6】:

          如果使用 Java 1.4 或更早版本,您需要将其转换为 People 类:

          ((Person)People.get(0)).setName("SomeName");
          

          如果使用 Java 1.5 或更高版本,请使用泛型:

          List<Person> people = new LinkedList();
          

          【讨论】:

          • 嗯,你不是说List&lt;Person&gt; people = new LinkedList&lt;Person&gt;(); 是泛型版本吗?
          【解决方案7】:

          您需要将 Linked List 定义为 Person LinkedList:

          LinkedList<Person> people = new LinkedList<Person>();
          people.get(0).setName("Steve");
          

          另一个注意事项(不是关于这个问题,只是为了改进你的 Java):你在变量名的第一个字母上使用小写,因为 Java 约定和任何后续单词的第一个字母都是大写的;

          float personsAge = 57.47;
          

          解释(如果容易感到无聊则忽略):

          LinkedList 未设置为存储特定的变量类型。 解决此问题的另一种方法是:

          LinkedList people = new LinkedList();
          Person person = (Person) people.get(0);
          person.setName("steve2")
          

          尽管您必须对人员列表中的每个“人员”执行此操作,这违背了 LinkedList 的要点。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-01-06
            • 2019-04-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-14
            • 1970-01-01
            相关资源
            最近更新 更多