2014-10-26 2 views
0
public Link insert(String data, int where) 
{ 
    Link temp = first; 
    //If list is empty, insert as first 
    if (first == null) 
    { 
     first = new Link(data, where); 
     return first; 
    } 
    //List is not empty 
    else 
    { 
     while (temp != null) 
     { 
      //If data is less than first, then insert as first 
      if (data.compareTo(temp.getdData()) < 0 && temp == first) 
      { 
       Link newLink = new Link(data, where); 
       newLink.setNext(first); 
       first.setPrevious(newLink); 
       first = newLink; 
       return newLink; 
      } 
      //If data is less than current, then insert before current 
      else if (data.compareTo(temp.getdData()) < 0) 
      { 
       Link newLink = new Link(data, where); 
       newLink.setNext(temp); 
       newLink.setPrevious(temp.getPrevious()); 
       temp.getPrevious().setNext(newLink); 
       temp.setPrevious(newLink); 
       return newLink; 
      } 
      //If data is more, but your at the end of the list. 
      else if (data.compareTo(temp.getdData()) > 0 && temp.getNext() == null) 
      { 
       Link newLink = new Link(data, where); 
       temp.setNext(newLink); 
       newLink.setPrevious(temp); 
       newLink.setNext(null); 
       last = newLink; 
       return newLink; 
      } 
      //Else keep going forward 
      else 
       temp = temp.next; 
     } 
    } 
    return temp; 
} 

Я могу вставить его в список, но по какой-то причине он не будет вставляться по порядку. Например, если данные ссылки являются «Hello», и я хочу вставить ссылку с «aaa», она не будет вставлять новую ссылку перед ссылкой «Hello».У вас возникли проблемы с вставкой в ​​список с двойным соединением с двойной связью с Java

ответ

0

Взгляните на то, как Java сравнить строку:

java> "aaa".compareTo("Hello") // positive number 
java> "Aaa".compareTo("Hello") // negative number 

Причина заключается в том, что ASCII код символа «а» больше «H».

Кстати, лучше использовать .equals() вместо == в коде, чтобы сравнить строки в Java, посмотрите на эту ссылку: http://perso.ensta-paristech.fr/~diam/java/online/notes-java/data/expressions/22compareobjects.html

+0

Java строки используют Unicode, а не ASCII. Но, да, кодовый блок (первый и единственный) UTF-16 для «a» больше, чем блок кода UTF-16 (первый и единственный) для «H». –

0

Если вы повторно реализовать коллекции - это красный флаг, вы делаете что-то неправильно.

Ваша задача может быть решена намного проще:

public class Link { 
    private final String data; 
    private final int where; 
    ... 
} 

public class LinkComparator implements Comparator<Link> { 
    @Override 
    public int compare(Link o1, Link o2) { 
     return o1.data.compareToIgnoreCase(o2.data); 
    } 
} 

public static void main(String[] args) { 
    NavigableSet<Link> links = new TreeSet<Link>(new LinkComparator()); 

    links.add(new Link(...)); 
} 
Смежные вопросы