Java - 你可以有多少个对象?
所以我有一个链表持有用户对象:Java - 你可以有多少个对象?
(USLinkedList是我创建了链表数据结构的名称)
(用户是我创建了一个类)
private USLinkedList<User> users;
我想一个数组来保存这些链表的对象:
private USLinkedList<User> dates[];
我想另一个数组持有上述阵列的对象:
private USLinkedList<User> dates[] months[];
我终于想这个数组去一个链表:
private USLinkedList<USLinkedList<User> dates[] months[]> years;
我想知道:
- ,如果这样的事情,甚至有可能?
- 如果可能,我的语法是否正确,即我的代码是否正确?
- 是不是很好的编程习惯做这样的事情?
谢谢你们!
是的,不,也许,按顺序。
你能做到吗?您可以拥有任意深度的藏品集合。
语法正确吗?语法不像您描述的那样。这会渗入到“良好实践”的讨论中,但混合列表和数组似乎是任意的,并可能导致混淆语法。当然,您的访问模式可能有理由将某些级别组织为链接列表,其他级别组合为数组,但这两者都有List
实现,我建议使用它们以保持一致性。所以我展示的例子将是正确的语法。
这是很好的做法吗?这有几个方面。
数据结构本身?那么,如果你需要以这种方式组织的数据结构,那么这就是你需要的。如果更简单的事情可以直观地满足要求,那么这是不好的做法。但如果这是做你需要做的简单而直观的方法,那就没问题。
USLinkedList
实现对我来说是一个问号。也许它提供了List实现不能做的事情;但如果是这样,从你所说的话不是很明显。如果java.util.LinkedList<User>
可以工作,那么使用它将比重新发明轮子更好。即使你确实需要你自己的USLinkedList
,如果可能的话,它应该实现List
接口,最好引用应该将它作为List
。
如上所述,如果没有很好的理由,我不会混合使用数组和列表。 LinkedList
和ArrayList
(或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?
但同样,这一切都假定有一个为这种多层次索引一个坚实的理由。你可以,如果它真的是直接的方式来做你需要的东西,那很好......但我不得不说,我不记得我最后需要这样一个嵌套结构。
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个新的对象,但这样它更容易理解,语法也更正确。¯_(ツ)_ /¯
我想大多数人 - 包括我自己 - 会争辩说,如果存在只包含一个List(这毕竟已经是一个对象),这些额外的对象是* less * simple –
是的,有些人会不同意, 当然,我只是为了举例而将每个列表作为对象。 另外,'private USLinkedList
具有复杂的数组结构通常是一个好兆头,您想要在对象中封装某些东西,并只包含该对象的列表。 – David
这是一个公平点,我会尝试这样的事情。 – Physco111
您的语法不正确。 'USLinkedList dates [] months [];''和'USLinkedList dates [] months []>'没有向您抛出编译器错误? –