包含两种不同类型数据类型的数据结构java

包含两种不同类型数据类型的数据结构java,java,list,abstract-data-type,Java,List,Abstract Data Type,我有一个目标 public class Test{ int age; LocalDateTime currentTime; //class also contains getters and setters. } 假设我有一个列表,我需要计算平均年龄。我遍历all,添加值,然后除以列表的大小。现在我需要计算年龄和平均值之间的差异。如果列表中不同对象之间的年龄和平均重复次数之间的差异相同,那么我需要从数组中删除具有最早时间戳的对象 我被困在如何做到这一点。起初我认为我可以扩展测试类来存储

我有一个目标

public class Test{

int age;
LocalDateTime currentTime;

//class also contains getters and setters. 

}
假设我有一个列表,我需要计算平均年龄。我遍历all,添加值,然后除以列表的大小。现在我需要计算年龄和平均值之间的差异。如果列表中不同对象之间的年龄和平均重复次数之间的差异相同,那么我需要从数组中删除具有最早时间戳的对象

我被困在如何做到这一点。起初我认为我可以扩展测试类来存储差异,然后进行排序,但我想避免这种情况。剩下的其他选项是将其存储在地图中或为它们创建单独的对象,但看起来非常混乱


关于如何很好地做到这一点,还有其他想法吗?

两个对象具有相同的平均年龄,当且仅当它们具有相同的年龄时。例如,您可以按年龄对列表进行排序,[从最晚到最早的时间戳],这可以使用比较器完成,并从第二个元素开始迭代数组,如果每个元素的年龄与前一个相同,则删除每个元素

< >编辑:除非你考虑平均值和年龄之间的差值的绝对值吗?如果是的话,请澄清。< / P >
事实上,如果你是指差值的绝对值,它不会造成很大的差异。创建一个比较器,该比较器按平均年龄[从最晚到最早的时间戳]对数组进行排序,算法仍然适用。如果需要,请参阅:。

此处不需要删除算法中的平均值

然后尝试使用两个for循环

for(int i=0; i<list.size();++i){

    Test currentTest = list.get(i);

    List<Test> toRemove = new LinkedList<>();
    for(int j=i+1;j<list.size();++j){
        Test test = list.get(j);
        if(currentTest.age == test.age){
              if(currentTest.currentTime.after(test.currentTime){
                    toRemove.add(currentTest);
                    currentTest = test;
              } else {
                    toRemove.add(test);
              }
        }
    }
    list.removeAll(toRemove);
}
或者,您可以首先按时间从早到晚对列表进行排序,在列表上迭代,若元素具有相同的年龄并且位于当前元素之后,则删除这些元素。或者使用带有年龄键的treemap,遍历列表,检查元素是否在树中,如果不在,则添加else比较currentTime并在需要时替换。然后获取设置的所有值


请记住,如果您需要,您必须在从列表中删除任何元素之前对其进行计数。

虽然OP没有明确说明这一点,但我认为他指的是绝对差异。如果平均值是20年,那么18年和22年的差异是相同的。在这种情况下,必须删除18年对象。这是我的理解。因此,您的iff似乎是错误的。这当然是可行的,但在这种情况下,在我看来,使用On²算法不符合做得很好的条件。