Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哪种方法对基数和排序速度更为优化?_Java_Spring_Spring Mvc_Spring Boot_Jpa - Fatal编程技术网

Java 哪种方法对基数和排序速度更为优化?

Java 哪种方法对基数和排序速度更为优化?,java,spring,spring-mvc,spring-boot,jpa,Java,Spring,Spring Mvc,Spring Boot,Jpa,我现在有一份名单 @OneToMany(mappedBy = "movie", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY) @OrderBy("date ASC") private List<MovieReleaseDateEntity> releaseDates = new ArrayList<>(); 并实现了可比性 public int compareTo(Mov

我现在有一份名单

@OneToMany(mappedBy = "movie", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@OrderBy("date ASC")
private List<MovieReleaseDateEntity> releaseDates = new ArrayList<>();
并实现了
可比性

public int compareTo(MovieReleaseDateEntity o) {
    return this.date.compareTo(o.date);
}
哪条路更好?第一种方法带有
列表
,第二种方法带有
集合

第一种方法(
@OrderBy(“date ASC”)
)在数据库级别排序,第二种方法在内存中使用java实现。若返回的列表足够大,最好使用第一种方法


如果返回的集合相当小,并且您需要一些复杂的排序逻辑(但按特定字段排序的情况并非如此),对于实现可比较的实体,使用SortedSet进行排序可能是合理的。

数据库设计为以优化的方式执行
order by
命令,同时对
order by
中使用的列进行索引。
因此,如果可以调整表上的索引约束,则应该支持按数据库排序

然而,正如你所知,这份名单并不是最适合JPA和 建议使用Set

我更愿意说,您不能滥用实体中的
列表
映射,因为出于合理的原因(基数),可接受的映射数量是有限的

您还可以更简单地看到事情:如果您只有很少的元素,我认为使用
集合
在性能方面可能是一种可以接受的方式。
否则,可能会倾向于使用
列表
和数据库完成的
order by


在任何情况下,使用对您的用例来说似乎最合适的结构(
列表
集合
),然后在更改设计之前测量实际性能,以期获得更好的性能。

例如,电影中其他标题的对象最多可以有25个左右。25号是大号的吗?对我来说25号绝对不是大号的。但如果大小大约为1000,它就会变大:)我的应用程序中有MovieReleaseDateEntity,它存储首映日期。根据IMDB网站,该电影有53个首映日期。因此,我的列表中有53个(MovieReleaseDateEntity)对象。您认为java中的对象太多了吗?我的应用程序类似于IMDB。或者根本不对对象进行排序并返回未排序的对象更好吗?53要排序的元素非常少。所以在java或数据库中,它不应该改变很多事情。注意,您还应该考虑您检索的实体的数量,并且包含该列表的代码> MOVIERELASEDATEATION<代码>。如果检索到100个这样的实体,这可能很重要。无论如何,不要过早地进行优化。根据功能需求使用所需的结构。与
TreeSet
相比,列表更易于客户端操作,并且占用的内存更少。因此,我首先倾向于这种方式,并且只有在不可避免的情况下才会重构到
TreeSet
public int compareTo(MovieReleaseDateEntity o) {
    return this.date.compareTo(o.date);
}