2017-02-16 85 views
-1

所以我有一个链表持有用户对象:Java - 你可以有多少个对象?

(USLinkedList是我创建了链表数据结构的名称)

(用户是我创建了一个类)

 private USLinkedList<User> users; 

我想一个数组来保存这些链表的对象:

 private USLinkedList<User> dates[]; 

我想另一个数组持有上述阵列的对象:

 private USLinkedList<User> dates[] months[]; 

我终于想这个数组去一个链表:

 private USLinkedList<USLinkedList<User> dates[] months[]> years; 

我想知道:

  • ,如果这样的事情,甚至有可能?
  • 如果可能,我的语法是否正确,即我的代码是否正确?
  • 是不是很好的编程习惯做这样的事情?

谢谢你们!

+3

具有复杂的数组结构通常是一个好兆头,您想要在对象中封装某些东西,并只包含该对象的列表。 – David

+0

这是一个公平点,我会尝试这样的事情。 – Physco111

+0

您的语法不正确。 'USLinkedList dates [] months [];''和'USLinkedList dates [] months []>'没有向您抛出编译器错误? –

回答

0

是的,不,也许,按顺序。

你能做到吗?您可以拥有任意深度的藏品集合。

语法正确吗?语法不像您描述的那样。这会渗入到“良好实践”的讨论中,但混合列表和数组似乎是任意的,并可能导致混淆语法。当然,您的访问模式可能有理由将某些级别组织为链接列表,其他级别组合为数组,但这两者都有List实现,我建议使用它们以保持一致性。所以我展示的例子将是正确的语法。

这是很好的做法吗?这有几个方面。

数据结构本身?那么,如果你需要以这种方式组织的数据结构,那么这就是你需要的。如果更简单的事情可以直观地满足要求,那么这是不好的做法。但如果这是做你需要做的简单而直观的方法,那就没问题。

USLinkedList实现对我来说是一个问号。也许它提供了List实现不能做的事情;但如果是这样,从你所说的话不是很明显。如果java.util.LinkedList<User>可以工作,那么使用它将比重新发明轮子更好。即使你确实需要你自己的USLinkedList,如果可能的话,它应该实现List接口,最好引用应该将它作为List

如上所述,如果没有很好的理由,我不会混合使用数组和列表。 LinkedListArrayList(或Vector,取决于同步需求)应该正常工作,并允许您始终使用List接口。

所以回到语法...

我建议使用的接口类型为引用我建议使用泛型。所以,你必须

private List<User> users; 

,你可以用

users = new LinkedList<User>(); 

填充(如果你确实需要自定义列表实现,可以取代LinkedList<User>USLinkedList<User>贯穿始终。如果它无法实现List接口,那么你也可以用`USLilnkedList取代List<User>

接下来的线,

private List<List<User>> dates; 

dates = new ArrayList<List<User>>(); 
dates.add(new LinkeList<User>()); // or whatever... 

然后

private List<List<List<User>>> months; 

months = new ArrayList<List<List<User>>>(); 
//etc. 

private List<List<List<List<User>>>> years; 
// well, you get the idea, right? 

但同样,这一切都假定有一个为这种多层次索引一个坚实的理由。你可以,如果它真的是直接的方式来做你需要的东西,那很好......但我不得不说,我不记得我最后需要这样一个嵌套结构。

+0

谢谢,我认为这是迄今为止最好的回应!关键是我们必须创建自己的数据结构,所以我们不能使用任何java的预先存在的数据结构。 – Physco111

+0

但我想我会制作更多的对象,并将这些对象存储在最终链接列表中。 – Physco111

+0

不要使用已经过时近19年的'java.util.Vector'。 –

0

private USLinkedList<User> dates[] months[]; private USLinkedList<USLinkedList<User> dates[] months[]> years;

的语法在这两种情况下是不正确的,而且就算是,这只是混乱。

Java是一种oop语言,oop用于使我们的人更简单。

我认为正确的做法,是要创造持有private USLinkedList<User> dates[]; 对象日期,然后创建MonthDates的对象持有private USLinkedList<Dates> month;

,然后创建FullDates的另一个目的持有private USLinkedList<MonthDates> fullDates;

我知道这意味着你应该创建3个新的对象,但这样它更容易理解,语法也更正确。¯_(ツ)_ /¯

+0

我想大多数人 - 包括我自己 - 会争辩说,如果存在只包含一个List(这毕竟已经是一个对象),这些额外的对象是* less * simple –

+0

是的,有些人会不同意, 当然,我只是为了举例而将每个列表作为对象。 另外,'private USLinkedList month''现在是一个对象,如果您希望重写排序方法或类似的东西,可以帮助您。 我希望我想表明的观点很明确... –

相关问题