试图对各自订单给出的字符串进行排序,不能使用集合

时间:2014-02-17 20:51:41

标签: java algorithm sorting

我在链接列表中排序String时遇到问题,我可以很容易地将数字相互比较并使它们按升序或降序排列。

public class Node
{
    private Shape shape; 
    private Node nextNode;
    private Node PreviousNode;
    private boolean front = false;

    Node() 
    {
       this.shape = null;
       this.nextNode = null;
       this.previousNode = null;
    }

    public Node(Shape shape, Node active)
    {
        this.shape = shape;
        this.nextNode = null;
        this.previousNode = null;
    }

    public Node addNode(Shape shape)
    getShape()
    setShape(Shape shape)
    getNextNode()
    setNextNode(Node nextNode)
    getPreviousNode()
    setPreviousNode(Node previousNode)
    public boolean front()
    public void setFront(boolean front)
}

顺序应该是这样的(方形,矩形,圆形,椭圆形,直线)

   public class linkedlist
   {
      Node front
      Node end



   public linkedlist()
   {
      this.setFront(null);
      this.end = null;
   }

   public void addFront(Shape shape)
   public void addNewNode(Shape shape)

   public boolean AscendingOrder(Node current)
   {
      Node compareNextNode = current.getNextNode();
      while(!compareNextNode.equals(null))
      {
         if(current.getShape().TypeOfShape == "SQUARE")
         {
             Node PreviousCurrent = current.getNextNode();

然后我不知道如何构建算法来对形状的其余部分进行排序 如果有人有任何可以帮助我的好参考,我会很高兴

2 个答案:

答案 0 :(得分:1)

我建议这样做:

  1. 让您的Shape班级实施Comparable<Shape>
  2. 定义一个final static String[] shapeOrder;数组,用于定义形状的顺序。
  3. 使用此前一个数组实现compareTo方法:首先根据shapeOrder数组和TypeOfShape获取当前形状的索引。获取当前对象和要比较的对象的索引后,比较索引,较小的索引将是 minor ,较大的索引将是 major (此行为将取决于您的使用情况。)
  4. 在排序算法中,进行比较时,只需执行current.getShape().compareTo(otherNode.getShape()),并使用返回的值(小于0,0,大于0)进行排序。
  5. 如果要同时执行升序和降序,请创建两个实现Comparator<Shape>的类,使用与上述类似的比较逻辑。

答案 1 :(得分:1)

一种解决方案是为您的形状类型创建enum,如下所示:

enum ShapeType {
    SQUARE,
    RECTANGLE,
    CIRCLE,
    OVAL,
    LINE
}

然后将Shape.TypeOfShape声明为ShapeType类型,而不是String。枚举的元素具有可比性,例如:

if (ShapeType.SQUARE.compareTo (ShapeType.CIRCLE) < 0)

会评估为真。所以你可以这样比较两个形状节点:

if (current.getShape().TypeOfShape.compareTo (compareNextNode.getShape().TypeOfShape) < 0)

查看当前形状是否“小于”compareNextNode的形状。