如何排序列表<! - ?延伸T - >

时间:2015-10-16 01:17:49

标签: java

我有一个清单

public function dataview($query)
{

$stmt = $this->db->prepare("SELECT * from login ORDER BY username");
$stmt->execute();

if($stmt->rowCount()>0)
{
while($row=$stmt->fetch(PDO::FETCH_ASSOC)) {
echo "<tr>";
echo "<td> ".$row['user_id']." </td>";
echo "<td> ".$row['username']." </td>";

echo '<td><a target="_blank" onclick="pop_up(this)" href=VIEWSAMPLE.PHP?user_id='.$row['user_id'].'>'.$row["username"].'</a></td>';

echo "<td> ".$row['password']." </td>";
echo '<td><a style="float:left" target="_blank" href="update.php?user_id=' . $row["user_id"] . '>'.$row["username"].'"<input name="image" type="image" value="edit" onclick="pop_up(this)"><image src="image/EDIT.png" class="img-responsive" width="25px"></a>
<a style="float:left" href="delete.php?user_id=' . $row["user_id"] . '>" <input name="image" type="image" value="delete" onclick="return confirm(\'are you sure?\')"><image src="image/DELETE.png" class="img-responsive" width="25px"></a></td>';
echo "</tr>";
}
}
else
{
 echo "<tr>";
        "<td>Nothing here...</td>";
        "</tr>";
}
}
}

我们怎么能这样排序?是否可以在Comparator实现上比较子类对象?

由于

2 个答案:

答案 0 :(得分:2)

请参阅Collections.sort,其中ndarray必须T

但是我会将implements Comparable<T>绑定到已知具有T final的基类,以确保在将苹果与梨进行比较时将它们视为水果

修改: 根据您的评论,您可以采用上述建议,但实施Comparable的替代方法是撰写Comparator并使用Collections.sort(List, Comparator)

无论哪种方式,如果你有苹果,梨或橙子,那么我会建议制作一个抽象类水果,并根据水果实施可比较/比较 - 这是比较苹果和梨等的唯一明智的方法 - 通过已知的属性对所有子类都是通用的。

示例代码:

compareTo

答案 1 :(得分:0)

  

我们如何对此进行排序?

所有元素必须相互比较,即<T extends Comparable<? super T>>。这意味着T类型的元素不仅可以与T相媲美,而且可以与super to T类型的元素相媲美。

如果您没有指定比较器,则在该情况下,列表将使用自然排序按升序排序。在您的情况下,该类将具有多个字段,并且使用自定义比较器是有意义的。

  

是否可以比较Comparator上的子类对象   执行?

是的。如果您指定<T extends Comparable<T>>,那么只有T类型的元素才具有可比性,但如果您使用<T extends Comparable<? super T>>,那么超类的元素也会被包含在内。