这是一个理论上的例子,但希望它突出了我的问题:
假设我有一个Item
个对象的主列表,Item
有两个属性,比如Weight
和Value
。
该程序经常需要按Weight
排序并获得最轻的Item
,而在其他地方按Value
排序并获得最贵Item
。
主列表有可能非常大,因此一遍又一遍地对主列表进行排序将是很多不合理的工作。为了节省时间,可以将排序后的结果存储为自己的列表吗?这些其他列表是否只存储指向真实对象的指针,而不仅仅是再次存储它们?
答案 0 :(得分:7)
这取决于Item
是struct
还是class
。如果它是class
(因为它是明智的默认值),那么 两个 列表只包含对象的引用 - 不会重复所有对象Weight
/ Value
值。如果它是struct
,则所有值将重复,因为每个值都有一个单独的支持向量,实际的结构将在向量中。附注:如果值为 strings ,则请注意字符串也是引用类型,因此字符串内容不会重复(除非它们是分开创建的,没有任何伪实习等。)
答案 1 :(得分:3)
这些其他列表是否只存储
指针对真实对象的引用,而不仅仅是再次存储它们?
只要Item
是一个类而不是结构:是。
答案 2 :(得分:0)
因为我们可以阅读here类是引用类型,这意味着它们不会被复制到新列表
你确实可以保留两个列表并按price
排序,另一个按Weight
排序,这样可以让您的生活更轻松