Guest User

Untitled

a guest
Mar 22nd, 2020
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.91 KB | None | 0 0
  1. public interface IListIterator<E>  {
  2.  
  3.     void add (E e);
  4.     boolean hasNext();
  5.     boolean hasPrevious();
  6.     E next();
  7.     int nextIndex();
  8.     E previous();
  9.     int previousIndex();
  10.     void remove();
  11.     void removeAll(E value);
  12.     void serialise();
  13.     void showAll();
  14.  
  15. }
  16.  
  17.  
  18.  
  19.  
  20. public abstract class AbstractList<E> implements IList<E> {
  21.     @Override
  22.     public String toString() {
  23.         StringBuffer buffer =  new StringBuffer();
  24.         buffer.append("[");
  25.         if(!isEmpty()){
  26.             for(E item:this)
  27.                 buffer.append(item).append(",");
  28.             buffer.setLength(buffer.length() - 2);
  29.         }
  30.         buffer.append("]");
  31.         return buffer.toString();
  32.     }
  33.  
  34.     public int hashCode(){
  35.         int hashCode = 0;
  36.         for(E item: this)
  37.             hashCode ^= item.hashCode();
  38.         return hashCode;
  39.     }
  40.  
  41.     public boolean equals(Object object){
  42.         if(object == null)
  43.             return false;
  44.         if(getClass() != object.getClass())
  45.             return false;
  46.         return equals((IList<E>)object);
  47.     }
  48.  
  49.     public boolean equals(IList<E> other){
  50.         if(other ==  null || size() != other.size())
  51.             return false;
  52.         else{
  53.             Iterator <E> i = iterator();
  54.             Iterator<E> j = other.iterator();
  55.             boolean has1= i.hasNext();
  56.             boolean has2 = j.hasNext();
  57.  
  58.             for(;has1 && has2 && i.next().equals(j.next());){
  59.                 has1 = i.hasNext();
  60.                 has2 = j.hasNext();
  61.             }
  62.             return !has1 && !has2;
  63.         }
  64.     }
  65.  
  66. }
  67.  
  68.  
  69. public class OneWayLinkedList<E> extends AbstractList<E> {
  70.     private class Element{
  71.         private E value;
  72.         private Element next;
  73.  
  74.         public E getValue() {
  75.             return value;
  76.         }
  77.  
  78.         public void setValue(E value) {
  79.             this.value = value;
  80.         }
  81.  
  82.         public Element getNext() {
  83.             return next;
  84.         }
  85.  
  86.         public void setNext(Element next) {
  87.             this.next = next;
  88.         }
  89.  
  90.         Element(E data){
  91.             this.value=data;
  92.         }
  93.     }
  94.  
  95.     private class InnerIterator implements Iterator<E>{
  96.         Element actElem;
  97.  
  98.         public InnerIterator() {
  99.             actElem = head;
  100.         }
  101.  
  102.         @Override
  103.         public boolean hasNext() {
  104.             return actElem != null;
  105.         }
  106.  
  107.         @Override
  108.         public E next() {
  109.             E value = actElem.getValue();
  110.             actElem = actElem.getNext();
  111.             return value;
  112.         }
  113.  
  114.         public void showAll(){
  115.  
  116.             Element actElem = head;
  117.             while(actElem != null){
  118.                 System.out.println(actElem);
  119.                 actElem = actElem.getNext();
  120.             }
  121.  
  122.         }
  123.     }
  124.  
  125.     private class InnerListIterator implements IListIterator<E> {
  126.  
  127.         int pos = -1;
  128.  
  129.         @Override
  130.         public void add(E e) {
  131.             OneWayLinkedList.this.add(pos+1, e);
  132.         }
  133.  
  134.         @Override
  135.         public boolean hasNext() {
  136.             return pos<size();
  137.         }
  138.  
  139.         @Override
  140.         public boolean hasPrevious() {
  141.             return pos >= 0;
  142.         }
  143.  
  144.         @Override
  145.         public E next() {
  146.             if(hasNext()) {
  147.                 pos = pos + 1;
  148.                 return get(pos + 1);
  149.             }
  150.             return null;
  151.  
  152.         }
  153.  
  154.         @Override
  155.         public int nextIndex() {
  156.             if(hasNext())
  157.                 return pos+1;
  158.             else
  159.                 return -1;
  160.         }
  161.  
  162.         @Override
  163.         public E previous() {
  164.             return null;
  165.         }
  166.  
  167.         @Override
  168.         public int previousIndex() {
  169.             if(hasPrevious())
  170.                 return pos-1;
  171.             else
  172.                 return -1;
  173.         }
  174.  
  175.         @Override
  176.         public void remove() {
  177.  
  178.         }
  179.  
  180.         @Override
  181.         public void removeAll(E value) {
  182.  
  183.  
  184.  
  185.         }
  186.  
  187.         @Override
  188.         public void serialise() {
  189.  
  190.         }
  191.  
  192.         @Override
  193.         public void showAll() {
  194.             Element actElem =  head;
  195.             while(actElem != null){
  196.                 System.out.println(actElem.getValue());
  197.                 actElem = actElem.getNext();
  198.             }
  199.         }
  200.     }
  201.  
  202.     private Element getElement(int index){
  203.         if (index<0) throw new IndexOutOfBoundsException();
  204.             Element actElem = head;
  205.         while(index > 0 && actElem != null){
  206.             index --;
  207.             actElem = actElem.getNext();
  208.         }
  209.         if(actElem == null) throw new IndexOutOfBoundsException();
  210.  
  211.         return actElem;
  212.  
  213.     }
  214.  
  215.  
  216.     Element head =  null;
  217.  
  218.     public OneWayLinkedList() {}
  219.  
  220.     @Override
  221.     public boolean add(E e) {
  222.         Element newElem = new Element(e);
  223.         if(head == null){
  224.             head = newElem;
  225.             return true;
  226.         }
  227.         Element tail = head;
  228.         while(tail.getNext() != null){
  229.             tail = tail.getNext();
  230.         }
  231.         tail.setNext(newElem);
  232.  
  233.         return true;
  234.     }
  235.  
  236.     @Override
  237.     public void add(int index, E element) {
  238.         if(index < 0) throw new IndexOutOfBoundsException();
  239.         Element newElem = new Element(element);
  240.         if(index == 0){
  241.             newElem.setNext(head);
  242.             head = newElem;
  243.         }
  244.         Element actElem = getElement(index -1);
  245.         newElem.setNext(actElem.getNext());
  246.         actElem.setNext(newElem);
  247.     }
  248.  
  249.     @Override
  250.     public void clear() {
  251.         head = null;
  252.     }
  253.  
  254.     @Override
  255.     public boolean contains(E element) {
  256.         return indexOf(element)>= 0;
  257.     }
  258.  
  259.     @Override
  260.     public E get(int index) {
  261.         Element actElement = getElement(index);
  262.         return actElement.getValue();
  263.     }
  264.  
  265.     @Override
  266.     public E set(int index, E element) {
  267.         Element actElement = getElement(index);
  268.         E elemData = actElement.getValue();
  269.         actElement.setValue(element);
  270.         return elemData;
  271.     }
  272.  
  273.     @Override
  274.     public int indexOf(E element) {
  275.         int pos = 0;
  276.         Element actElem =  head;
  277.         while(actElem != null){
  278.             if(actElem.getValue().equals(element))
  279.                 return pos;
  280.             pos++;
  281.             actElem = actElem.getNext();
  282.         }
  283.         return -1;
  284.     }
  285.  
  286.     @Override
  287.     public boolean isEmpty() {
  288.         return head == null;
  289.     }
  290.  
  291.     @Override
  292.     public Iterator<E> iterator() {
  293.         return new InnerIterator();
  294.     }
  295.  
  296.     @Override
  297.     public IListIterator<E> listIterator() {
  298.         return new InnerListIterator(); }
  299.  
  300.     @Override
  301.     public E remove(int index) {
  302.         if(index < 0 || head == null) throw new IndexOutOfBoundsException();
  303.         if (index == 0){
  304.             E retValue = head.getValue();
  305.             head = head.getNext();
  306.             return retValue;
  307.         }
  308.         Element actElem = getElement(index - 1);
  309.         if(actElem.getNext() == null)
  310.             throw new IndexOutOfBoundsException();
  311.         E retValue =  actElem.getNext().getValue();
  312.         actElem.setNext(actElem.getNext().getNext());
  313.             return retValue;
  314.     }
  315.  
  316.     @Override
  317.     public boolean remove(E element) {
  318.         if(head == null)
  319.             return false;
  320.         if(head.getValue().equals(element)){
  321.             head = head.getNext();
  322.             return true;
  323.         }
  324.         Element actElem = head;
  325.         while(actElem.getNext() != null && !actElem.getNext().getValue().equals(element))
  326.             actElem= actElem.getNext();
  327.         if (actElem.getNext() == null)
  328.             return false;
  329.         actElem.setNext(actElem.getNext().getNext());
  330.             return true;
  331.     }
  332.  
  333.     @Override
  334.     public int size() {
  335.         int pos = 0;
  336.         Element actElem =  head;
  337.         while(actElem != null){
  338.             pos++;
  339.             actElem = actElem.getNext();
  340.         }
  341.         return pos;
  342.     }
  343. }
Advertisement
Add Comment
Please, Sign In to add comment