CodeGym /ื‘ืœื•ื’ Java /Random-HE /ืžื‘ื ื” ื ืชื•ื ื™ื ืฉืœ ืจืฉื™ืžื” ืžืงื•ืฉืจืช ื‘-Java
John Squirrels
ืจึธืžึธื”
San Francisco

ืžื‘ื ื” ื ืชื•ื ื™ื ืฉืœ ืจืฉื™ืžื” ืžืงื•ืฉืจืช ื‘-Java

ืคื•ืจืกื ื‘ืงื‘ื•ืฆื”
ืžื‘ื ื™ ื ืชื•ื ื™ื ืฉื•ื ื™ื ื ื•ืฆืจื™ื ืœืžื˜ืจื•ืช ืฉื•ื ื•ืช. ืื•ืœื™ ืืชื” ื™ื•ื“ืข ืขืœ ArrayList (ืื ืขื“ื™ื™ืŸ ืœื, ืื ื• ืžืžืœื™ืฆื™ื ืœืš ืœืงืจื•ื ืขืœ ื–ื” ืงื•ื“ื). ื‘ืžืืžืจ ื–ื”, ืื ื• ื”ื•ืœื›ื™ื ืœืœืžื•ื“ ืขืœ LinkedList ื•ืœื”ื‘ื™ืŸ ืœืžื” ื”ืื•ืกืฃ ื”ื–ื” ื˜ื•ื‘. ืื ืชืกืชื›ืœ ืขืœ ืžืงื•ืจ ืงื•ื“ ื”ื›ื™ืชื” ืฉืœ LinkedList Java 8 (ืื• ื’ืจืกื” ืžืื•ื—ืจืช ื™ื•ืชืจ ืฉืœ ื”ืฉืคื”) (ื‘ืืชืจ ืื•ืจืงืœ ืื• ื‘-IDE ืฉืœืš, ื‘ืžืงืจื” ืฉืœ IDEA: crtl+B ืขืœ ืฉื ื”ืžื—ืœืงื”) ืชืจืื” ืืช ื”ื”ืฆื”ืจื” ื”ื‘ืื”:

public class LinkedList<E>
   extends AbstractSequentialList<E>
   implements List<E>, Deque<E>, Cloneable, java.io.Serializable
ื›ืจื’ืข ื”ืžื™ื“ืข ื”ื—ืฉื•ื‘ ื‘ื™ื•ืชืจ ืžื”ืงื•ื“ ื”ื•ื ื”ืขื•ื‘ื“ื” ืฉ- LinkedList ืžื™ื™ืฉืžืช ืžืžืฉืงื™ List ื•- Deque . ืžืžืฉืง ื”- List ืฉื•ืžืจ ืขืœ ืจืฆืฃ ื”ื•ืกืคืช ื”ืคืจื™ื˜ื™ื ื•ืžืืคืฉืจ ื’ื™ืฉื” ืœืคืจื™ื˜ ืœืคื™ ืื™ื ื“ืงืก. ื”ืชื•ืจ ื”"ืจื’ื™ืœ" ืชื•ืžืš ื‘ื”ื•ืกืคืช ืืœืžื ื˜ื™ื ืœืกื•ืฃ ื•ื—ื™ืœื•ืฅ ืฉืœื”ื ืžื”ื”ืชื—ืœื”. Deque ื”ื•ื ืชื•ืจ ื“ื•-ื›ื™ื•ื•ื ื™, ื•ื”ื•ื ืชื•ืžืš ื‘ื”ื•ืกืคื” ื•ื”ืกืจื” ืฉืœ ืืœืžื ื˜ื™ื ืžืฉื ื™ ื”ืฆื“ื“ื™ื. ืืชื” ื™ื›ื•ืœ ืœื—ืฉื•ื‘ ืขืœ ื–ื” ื›ืขืœ ืฉื™ืœื•ื‘ ืฉืœ ืžื—ืกื ื™ืช ื•ืชื•ืจ. LinkedList Java ืžื‘ื ื” ื ืชื•ื ื™ื - 2ืื–, LinkedList ื”ื•ื ื™ื™ืฉื•ื ืฉืœ ืฉื ื™ ืืœื”, ื•ื”ื•ื ืžืืคืฉืจ ืœื ื• ืœื™ืฆื•ืจ ืชื•ืจ ื“ื•-ื›ื™ื•ื•ื ื™ ื”ืžื•ืจื›ื‘ ืžื›ืœ ืื•ื‘ื™ื™ืงื˜ ื›ื•ืœืœ null. LinkedList ื”ื•ื ืื•ืกืฃ ืฉืœ ืืœืžื ื˜ื™ื. ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืจืื•ืช ืืช ื–ื” ื‘ืžืงื•ืจ ื”ืงื•ื“ ืฉืœ ื”ืžื—ืœืงื”, ื”ืคืขื ืฉื™ืžื• ืœื‘ ืœืฉื“ื•ืช:

transient int size = 0;
/**
* Pointer to first node.
*/
transient Node<E> first;
/**
* Pointer to last node.
*/
transient Node<E> last;
ื›ืœ ืืœืžื ื˜, ื‘ื“ืจืš ื›ืœืœ ืงืจืื ื• ืœื• Node , ืžื›ื™ืœ ืื•ื‘ื™ื™ืงื˜ ื•ื”ืคื ื™ื•ืช ืœืฉื ื™ ืื•ื‘ื™ื™ืงื˜ื™ื ืฉื›ื ื™ื - ื”ืงื•ื“ื ื•ื”ื‘ื. ืœืคื™ื›ืš, ื–ื” ืœื ืžืื•ื“ ื™ืขื™ืœ ืžื‘ื—ื™ื ืช ื”ืฉื™ืžื•ืฉ ื‘ื–ื™ื›ืจื•ืŸ. LinkedList Java ืžื‘ื ื” ื ืชื•ื ื™ื - 3ืžื›ื™ื•ื•ืŸ ืฉ- LinkedList ื”ื•ื ืœืžืขืฉื” ืžื‘ื ื” ื“ื•-ื›ื™ื•ื•ื ื™, ืื ื• ื™ื›ื•ืœื™ื ื‘ืงืœื•ืช ืœื”ื•ืกื™ืฃ ืื• ืœื”ืกื™ืจ ืืœืžื ื˜ื™ื ืžืฉื ื™ ื”ืฆื“ื“ื™ื.

ื‘ื•ื ื™ LinkedList

ื‘ื—ื–ืจื” ืœืžืงื•ืจ ื”ืงื•ื“, ื ื•ื›ืœ ืœื’ืœื•ืช ืฉืœ- LinkedList ื™ืฉ ืฉื ื™ ื‘ื ืื™ื
  • LinkedList() ืœืœื ืคืจืžื˜ืจื™ื ืžืฉืžืฉ ืœื‘ื ื™ื™ืช ืจืฉื™ืžื” ืจื™ืงื”.
  • >LinkedList(Collection<? extends E> c) ืžื™ื•ืขื“ืช ืœื™ืฆื™ืจืช ืจืฉื™ืžื” ื”ืžื›ื™ืœื” ืืช ื”ืืœืžื ื˜ื™ื ืฉืœ ื”ืื•ืกืฃ ืฉืฆื•ื™ืŸ, ืœืคื™ ื”ืกื“ืจ ืฉื”ื ื™ื•ื—ื–ืจื• ืขืœ ื™ื“ื™ ื”ืื™ื˜ืจื˜ื•ืจ ืฉืœ ื”ืื•ืกืฃ.

ื”ืฆื”ืจืช LinkedList

ืœืžืขืฉื”, ืจืฉื™ืžื” ืžืงื•ืฉืจืช (Java ืื• ื‘ื›ืœ ืฉืคื” ืื—ืจืช) ืžื•ืจื›ื‘ืช ืžืจืฆืฃ ืฉืœ ืฆืžืชื™ื. ื›ืœ ืฆื•ืžืช ื ื•ืขื“ ืœืื—ืกืŸ ืื•ื‘ื™ื™ืงื˜ ืžืกื•ื’ ืฉื”ื•ื’ื“ืจ ื‘ืขืช ื”ื™ืฆื™ืจื”. ืื– ื›ื“ื™ ืœื™ืฆื•ืจ LinkedList , ืงื•ื“ Java ื”ื•ื ื”ื‘ื:

LinkedList<Integer> myList = new LinkedList<>();
ื™ืฉ ืœื ื• ืžื˜ืจื” ืœืฉืžื•ืจ ืจืฆืฃ ืฉืœ ืžืกืคืจื™ื ืฉืœืžื™ื ื•ืงื™ืฉื•ืจื™ื ืœืฉื›ื ื™ื. ืขื ื–ืืช, ื”ื•ื ืจื™ืง ื›ืจื’ืข.

LinkedList ืคืขื•ืœื•ืช ืขื™ืงืจื™ื•ืช

ื›ืจื’ื™ืœ, ื‘ืžืงืจื” ืฉืœ Collections ืืชื” ื™ื›ื•ืœ ืœื”ื›ื ื™ืก ืืœืžื ื˜ื™ื ืœ- LinkedList (ืœืงืฆื”ื• ืื• ืœืืžืฆืข), ืœื”ืกื™ืจ ืžืฉื ื•ืœืงื‘ืœ ืืœืžื ื˜ ืœืคื™ ืื™ื ื“ืงืก. ืื– ื”ื ื” ื”ื:
  • add(E element) ืžื•ืกื™ืฃ ืืช ื”ืืœืžื ื˜ ืฉืฆื•ื™ืŸ ืœืกื•ืฃ ืจืฉื™ืžื” ื–ื•;
  • add(int index, E element) ื”ื•ืกืคืช ื”ืืœืžื ื˜ ื‘ืื™ื ื“ืงืก ื”ืžื™ืงื•ื ืฉืฆื•ื™ืŸ ;
  • get(int index) ืžื—ื–ื™ืจื” ืืช ื”ืืœืžื ื˜ ื‘ืžื™ืงื•ื ืฉืฆื•ื™ืŸ ื‘ืจืฉื™ืžื” ื–ื•;
  • remove(int index) ืžืกื™ืจ ืืช ื”ืืœืžื ื˜ ืฉื ืžืฆื ื‘ืื™ื ื“ืงืก ื”ืžื™ืงื•ื;
  • remove(Object o) ืžืกื™ืจ ืืช ื”ืžื•ืคืข ื”ืจืืฉื•ืŸ ืฉืœ ? o ืืœืžื ื˜ ืžื”ืจืฉื™ืžื” ื”ื–ื• ืื ื”ื•ื ืงื™ื™ื.
  • remove() ืžืื—ื–ืจ ื•ืžืกื™ืจ ืืช ื”ืืœืžื ื˜ ื”ืจืืฉื•ืŸ ื‘ืจืฉื™ืžื”.

ื™ื™ืฉื•ื ืจืฉื™ืžื” ืžืงื•ืฉืจืช ื‘-Java, ื”ื•ืกืคื” ื•ื”ืกืจื” ืฉืœ ืืœืžื ื˜ื™ื. ื“ื•ื’ืžื

ื‘ื•ื ื ื ืกื” ืืช ื”ืคืขื•ืœื•ืช ื”ืืœื” ืขืœ ืชืจื’ื•ืœ. ืจืืฉื™ืช, ื™ื™ืฉื•ื Java LinkedList: ื™ืฆื™ืจืช LinkedList ืฉืœ ืžื—ืจื•ื–ื•ืช, ื”ื•ืกืคืช 3 ืืœืžื ื˜ื™ื. ืœืื—ืจ ืžื›ืŸ ื”ืกืจ ืื—ื“ ื•ืื– ื”ื•ืกืฃ ืื—ื“ ื‘ืืžืฆืข.

public class MyLinkedTest {
   public static void main(String[] args) {
       String h1 = "my";
       String h2 = "favorite";
       String h3 = "book";
//  LinkedList implementation in Java
       LinkedList<String> linkedList = new LinkedList();
       linkedList.add(h1);
       linkedList.add(h2);
       linkedList.add(h3);
       System.out.println("my list after adding 3 elements:");
       System.out.println(linkedList);
       System.out.println("element #2 of my list:");
       System.out.println(linkedList.get(2));
       linkedList.remove(1);
       System.out.println("my list after removing #1:");
       System.out.println(linkedList);
       linkedList.add(1,"first");
       System.out.println("my list after adding an element in the middle");
       System.out.println(linkedList);
   }
ื”ืชื•ืฆืื” ืฉืœ ื”ืคืขืœืช ืชื•ื›ื ื™ืช ื–ื•:

my list after adding 3 elements:
[my, favorite, book]
element #2 of my list:
book
my list after removing #1:
[my, book]
my list after adding an element in the middle
[my, first, book]
LinkedList ื”ื•ื ื—ืœืง ืžืžืกื’ืจืช ื”ืื•ืกืฃ , ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืื™ื˜ืจื˜ื•ืจ ื›ื“ื™ ืœื”ืกื™ืจ ืืœืžื ื˜ื™ื, ื›ืžื• ื’ื ืื™ื˜ืจื˜ื•ืจ ืžื™ื•ื—ื“ ืœืจืฉื™ืžื•ืช - ListIterator . ืืคื™ืœื• ื™ื•ืชืจ, ืคืขื•ืœื•ืช ืขื ืื™ื˜ืจื˜ื•ืจ ืžืกืคืงื•ืช ืืช ื”ื™ืชืจื•ื ื•ืช ื”ืขื™ืงืจื™ื™ื ืฉืœ ืžื—ืœืงื” LinkedList : ื‘ื™ืฆื•ืขื™ื ื˜ื•ื‘ื™ื ืฉืœ ืคืขื•ืœื•ืช ื”ื•ืกืคื”/ืžื—ื™ืงื”. ื‘ืืžืฆืขื•ืช Iterator ืืชื” ืขืฉื•ื™ ืœืงื‘ืœ ื–ืžืŸ ืงื‘ื•ืข ืขื‘ื•ืจื. ื‘ื”ืžืฉืš ืžืืžืจ ื–ื”, ื ื›ืชื•ื‘ ื“ื•ื’ืžื” ืœืงื•ื“ ื›ื“ื™ ืœื”ืฉื•ื•ืช ื‘ื™ืŸ ArrayList ืœื‘ื™ืŸ LinkedList+Iterator
  • Iterator.remove() ืžืกื™ืจ ืืช ื”ืืœืžื ื˜ ื”ืื—ืจื•ืŸ ืฉื”ื•ื—ื–ืจ ืขืœ ื™ื“ื™ ืื™ื˜ืจื˜ื•ืจ ื–ื”.
  • ListIterator.add(E element) ืžื•ืกื™ืฃ ืืœืžื ื˜ ืœืจืฉื™ืžื”

Java LinkedList ื“ื•ื’ืžื”: ืื™ืš Iterator ืขื•ื‘ื“

ื›ืืŸ ื™ืฉ ืœื ื• ืงื•ื“ ื“ื•ื’ืžื” ืฉืœ Java LinkedList ืงื˜ืŸ , ืฉื‘ื• ืื ื—ื ื• ืžื ืกื™ื ืœื”ื•ืกื™ืฃ ื•ืœืžื—ื•ืง ื“ืจืš Iterator.

public class MyLinkedTest {
   public static void main(String[] args) {
       String h1 = "my";
       String h2 = "favorite";
       String h3 = "book";
       LinkedList<String> linkedList = new LinkedList();
       linkedList.add(h1);
       linkedList.add(h2);
       linkedList.add(h3);
 
       Iterator i = linkedList.iterator();
       String str = "";
       while (i.hasNext()) {
           str = (String)i.next();
           if (str.equals("favorite")) {
               i.remove();
               break;
           }
       }

       System.out.println("linkedList after removing element via Iterator:");
       System.out.println(linkedList);
       ListIterator listIterator = linkedList.listIterator();
       listIterator.add("I've got");
       System.out.println("linkedList after adding the element via ListIterator");
       System.out.println(linkedList);
 
   }
}
ื”ืชื•ืฆืื” ืฉืœ ื”ืคืขืœืช ืชื•ื›ื ื™ืช ื–ื•:

linkedList after removing element via Iterator:
[my, book]
linkedList after adding the element via ListIterator
[I've got, my, book]
ืคืขื•ืœื•ืช ื ื•ืกืคื•ืช ืฉืœ Java LinkedList :
  • addFirst() , addLast() ืžื•ืกื™ืคื™ื ืืœืžื ื˜ ืœื”ืชื—ืœื”/ืกื•ืฃ ืฉืœ ืจืฉื™ืžื”
  • clear() ืžืกื™ืจ ืืช ื›ืœ ื”ืจื›ื™ื‘ื™ื ืžื”ืจืฉื™ืžื”
  • contains(Object o) ืžื—ื–ื™ืจื” true ืื ื”ืจืฉื™ืžื” ืžื›ื™ืœื” ืืช ื”ืืœืžื ื˜ o.
  • indexOf(Object o) ืžื—ื–ื™ืจ ืืช ื”ืื™ื ื“ืงืก ืฉืœ ื”ื”ื•ืคืขื” ื”ืจืืฉื•ื ื” ืฉืœ ืืœืžื ื˜ o, ืื• -1 ืื ื”ื•ื ืœื ื‘ืจืฉื™ืžื”.
  • set(int index, E element) ืžื—ืœื™ืฃ ืืช ื”ืืœืžื ื˜ ื‘ืžื™ืงื•ื ื”ืื™ื ื“ืงืก ื‘ืืœืžื ื˜
  • size()ืžื—ื–ื™ืจ ืืช ื›ืžื•ืช ื”ืืœืžื ื˜ื™ื ื‘ืจืฉื™ืžื”.
  • toArray() ืžื—ื–ื™ืจ ืžืขืจืš ื”ืžื›ื™ืœ ืืช ื›ืœ ื”ืืœืžื ื˜ื™ื ืฉืœ ื”ืจืฉื™ืžื” ืžื”ืืœืžื ื˜ ื”ืจืืฉื•ืŸ ื•ืขื“ ื”ืื—ืจื•ืŸ.
ืื’ื‘, ื‘ื”ื™ื•ืชื• ืชื•ืจ ื‘ื’ื•ื“ืœ ืฉื ื™, ืœ-LinkedList ื‘-Java ื™ืฉ ืคืขื•ืœื•ืช ืกืคืฆื™ืคื™ื•ืช ืœื—ืกื™ืžื”:
  • pop() ืฉืžืงืคื™ืฅ ืืœืžื ื˜ ืžื”ืžื—ืกื ื™ืช (ืžื™ื•ืฆื’ ืขืœ ื™ื“ื™ ื”ืจืฉื™ืžื”)
  • push(E e) ืฉื“ื•ื—ืฃ ืืœืžื ื˜ ืืœ ื”ืขืจื™ืžื” (ืžื™ื•ืฆื’ ืขืœ ื™ื“ื™ ืจืฉื™ืžื” ื–ื•)

ื›ื™ืฆื“ ืœื”ืคื•ืš LinkedList: ื“ื•ื’ืžื”

ื”ื ื” ื“ื•ื’ืžื” ืงื˜ื ื”, ืžืฉื™ืžื” ืคื•ืคื•ืœืจื™ืช ืืš ืงืœื” ืœืžืชื—ื™ืœื™ื. ื™ืฉ ืœื ื• LinkedList ื•ืฆืจื™ืš ืœื”ืคื•ืš ืื•ืชื”. ื”ืืœื’ื•ืจื™ืชื ื”ืงืœ ื‘ื™ื•ืชืจ ื”ื•ื ืœืขื‘ื•ืจ ืขืœ ื”- LinkedList ื‘ืกื“ืจ ื”ืคื•ืš ื•ืœื”ื›ื ื™ืก ื›ืœ ืืœืžื ื˜ ืœื—ื“ืฉ. ืขื ื–ืืช, ืื•ืœื™ ืชืžืฆื ื“ืจืš ื˜ื•ื‘ื” ื™ื•ืชืจ? ืœื”ืœืŸ ื”ืงื•ื“ ืฉืœ ืชื•ื›ื ื™ืช Java ื‘ืจืฉื™ืžื” ืžืงื•ืฉืจืช ื”ืคื•ื›ื”:

public class MyLinkedTest {
   public static void main(String[] args) {
       String h1 = "my";
       String h2 = "favorite";
       String h3 = "book";
       LinkedList<String> linkedList = new LinkedList();
       linkedList.add(h1);
       linkedList.add(h2);
       linkedList.add(h3);
       System.out.println(linkedList);
       System.out.println("Reversed LinkedList:");
       System.out.println(reverseLinkedList(linkedList));
   }
   public static LinkedList<String> reverseLinkedList(LinkedList<String> list)
   {
       LinkedList<String> LinkedList = new LinkedList<String>();
       for (int i = list.size() - 1; i >= 0; i--) {
           LinkedList.add(list.get(i));
       }
       return LinkedList;
   }
}
ื”ืชื•ืฆืื”:

[I've got, my, book]
Reversed LinkedList:
[book, my, I've got]

LinkedList ืœืขื•ืžืช ArrayList: ืžืชื™ ืœื”ืฉืชืžืฉ ื‘ืจืืฉื•ืŸ

ื’ื LinkedList ื•ื’ื ArrayList ื”ื ื™ื™ืฉื•ืžื™ื ืฉืœ ืžืžืฉืง List . LinkedList ืžื™ื™ืฉืžืช ืื•ืชื• ืขื ืจืฉื™ืžื” ืžืงื•ืฉืจืช ื›ืคื•ืœื”. ArrayList ืžื™ื™ืฉื ืื•ืชื• ื‘ืืžืฆืขื•ืช ืžืขืจืš ืฉื™ื ื•ื™ ื’ื•ื“ืœ ื“ื™ื ืžื™. ื›ืคื™ ืฉืืชื” ื›ื‘ืจ ื™ื•ื“ืข, ื›ืœ ืฆื•ืžืช ืฉืœ LinkedList ืžื›ื™ืœ ืื•ื‘ื™ื™ืงื˜ื™ื ื•ืฉืชื™ ื”ืคื ื™ื•ืช ืœืฉื›ื ื™ื. ื”ืžืฉืžืขื•ืช ื”ื™ื ืขืœื•ื™ื•ืช ื–ื™ื›ืจื•ืŸ ื ื•ืกืคื•ืช ืขื‘ื•ืจ ืื—ืกื•ืŸ ื”ืคื ื™ื•ืช ื‘ื™ืŸ ืืœืžื ื˜ื™ื ื‘ืžืงืจื” ืฉืœ Java LinkedList . ArrayList ืžื™ื™ืฉืžืช ืื•ืชื• ืขื ืžืขืจืš ืฉื™ื ื•ื™ ื’ื•ื“ืœ ื“ื™ื ืžื™. ื—ืœืง ืžืคืขื•ืœื•ืช LinkedList ื•- ArrayList ื ืจืื•ืช ื–ื”ื•ืช, ืื‘ืœ ื”ืŸ ืคื•ืขืœื•ืช ื‘ืฆื•ืจื” ืฉื•ื ื”. ื‘ืžืงืจื” ืฉืœ ArrayList , ืืชื” ืžื‘ืฆืข ืžื ื™ืคื•ืœืฆื™ื•ืช ืขื ืžืขืจื›ื™ื ืคื ื™ืžื™ื™ื, ื‘- LinkedList - ืขื ื”ืคื ื™ื•ืช. ArrayList ื”ื•ื ื”ื™ื™ืฉื•ื ื”ืคื•ืคื•ืœืจื™ ื‘ื™ื•ืชืจ ืฉืœ List . ืืชื” ื‘ื”ื—ืœื˜ ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘-ArrayList ื›ืืฉืจ ื”ื’ื™ืฉื” ืœืื™ื ื“ืงืก ื”ื™ื ื‘ืขื“ื™ืคื•ืช ืžื›ื™ื•ื•ืŸ ืฉืคืขื•ืœื•ืช ืืœื• ืžื‘ื•ืฆืขื•ืช ื‘ื–ืžืŸ ืงื‘ื•ืข. ื”ื•ืกืคื” ืœืกื•ืฃ ื”ืจืฉื™ืžื” ื‘ืžืžื•ืฆืข ื ืขืฉื™ืช ื’ื ื”ื™ื ื‘ื–ืžืŸ ืงื‘ื•ืข. ื™ืชืจื” ืžื›ืš, ืœ- ArrayList ืื™ืŸ ืขืœื•ื™ื•ืช ื ื•ืกืคื•ืช ืขื‘ื•ืจ ืื—ืกื•ืŸ ื—ื‘ื•ืจื” ืฉืœ ืืœืžื ื˜ื™ื. ืืชื” ื™ื›ื•ืœ ืœืกืคื•ืจ ื›ื—ืกืจื•ื ื•ืช ืืช ืžื”ื™ืจื•ืช ืคืขื•ืœื•ืช ื”ื”ื›ื ืกื” ื•ื”ื”ืกืจื” ื›ืืฉืจ ื”ื™ื ื ืขืฉื™ืช ืœื ื‘ืกื•ืฃ ื”ืจืฉื™ืžื”. LinkedList ืฉื™ืžื•ืฉื™ ื™ื•ืชืจ ื‘ืžืงืจื” ืฉืœ ื‘ื™ืฆื•ืขื™ ืคืขื•ืœื•ืช ื”ื•ืกืคื” ื•ืžื—ื™ืงื” ื‘ืžื•ื‘ื ื™ื ืžืกื•ื™ืžื™ื: ืื ืืชื” ืžืฉืชืžืฉ ื‘ืื™ื˜ืจื˜ื•ืจื™ื ื–ื” ืžืชืจื—ืฉ ื‘ื–ืžืŸ ืงื‘ื•ืข. ืคืขื•ืœื•ืช ื’ื™ืฉื” ืœืคื™ ืื™ื ื“ืงืก ืžื‘ื•ืฆืขื•ืช ืขืœ ื™ื“ื™ ื—ื™ืคื•ืฉ ืžืชื—ื™ืœืช ื”ืกื•ืฃ (ืžื” ืฉืงืจื•ื‘ ืžื‘ื™ื ื™ื”ื) ืœืืœืžื ื˜ ื”ืจืฆื•ื™. ืขื ื–ืืช, ืืœ ืชืฉื›ื— ืขืœื•ื™ื•ืช ื ื•ืกืคื•ืช ืขื‘ื•ืจ ืื—ืกื•ืŸ ื”ืคื ื™ื•ืช ื‘ื™ืŸ ืืœืžื ื˜ื™ื. ืื– ื”ื ื” ืคืขื•ืœื•ืช LinkedList ื•- ArrayList ืกื˜ื ื“ืจื˜ื™ื•ืช ืขื ื–ืžื ื™ ืจื™ืฆื” ืืœื’ื•ืจื™ืชืžื™ื™ื. N ืžืชื™ื™ื—ืก ืœืžืกืคืจ ื”ืคืจื™ื˜ื™ื ืฉื›ื‘ืจ ื ืžืฆืื™ื ื‘ืจืฉื™ืžื”. O(N) ืคื™ืจื•ืฉื• ืฉื‘ืžืงืจื” ื”ื’ืจื•ืข ืขืœื™ื ื• "ืœืขื‘ื•ืจ" ืขืœ ื›ืœ ื”ืจืฉื™ืžื” ืขื“ ืฉื ืžืฆื ื”ืžื™ืงื•ื ื”ื“ืจื•ืฉ, ืœืžืฉืœ, ืœื”ื›ื ืกืช ื”ืืœืžื ื˜ ื”ื—ื“ืฉ ืœืจืฉื™ืžื”. O(1) ืคื™ืจื•ืฉื• ืฉื”ืคืขื•ืœื” ืžืชืจื—ืฉืช ื‘ื–ืžืŸ ืงื‘ื•ืข, ืœืœื ืชืœื•ืช ื‘ืžืกืคืจ ื”ืคืจื™ื˜ื™ื.

ืžื•ืจื›ื‘ื•ืช ื–ืžืŸ ืฉืœ LinkedList

ืคืขื•ืœืช Java LinkedList ื™ืขื™ืœื•ืช ืืœื’ื•ืจื™ืชืžื™ืช
get(int index) O(n) , ื‘ืžืžื•ืฆืข - n/4 ืฉืœื‘ื™ื, ื›ืืฉืจ n ื”ื•ื ื’ื•ื“ืœ LinkedList
add(E element) O(1)
add(int index, E element) O(n) , ื‘ืžืžื•ืฆืข - n/4 ืฉืœื‘ื™ื; ืื ืื™ื ื“ืงืก = 0 ืื– O(1) , ืื– ืื ืืชื” ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืžืฉื”ื• ื‘ืชื—ื™ืœืช ื”ืจืฉื™ืžื”, LinkedList<E> ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื‘ื—ื™ืจื” ื˜ื•ื‘ื”
remove(int index) O(n) , ื‘ืžืžื•ืฆืข - n/4 ืฉืœื‘ื™ื
Iterator.remove() O(1) ื–ื•ื”ื™ ื”ืกื™ื‘ื” ื”ืขื™ืงืจื™ืช ืœื”ืฉืชืžืฉ ื‘-LinkedList<E>

ืžื•ืจื›ื‘ื•ืช ื–ืžืŸ ArrayList

ืคืขื•ืœืช LinkedList ื™ืขื™ืœื•ืช ืืœื’ื•ืจื™ืชืžื™ืช
get(int index) O(1) , ืื—ืช ื”ืกื™ื‘ื•ืช ื”ืขื™ืงืจื™ื•ืช ืœื”ืฉืชืžืฉ ื‘-ArrayList<E>
add(E element) O(n) ื”ื•ื ื”ืžืงืจื” ื”ื’ืจื•ืข ื‘ื™ื•ืชืจ ืฉื›ืŸ ื™ืฉ ืœืฉื ื•ืช ืืช ื’ื•ื“ืœื• ื•ืœื”ืขืชื™ืง ืืช ื”ืžืขืจืš, ืื•ืœื ื‘ืคื•ืขืœ, ื–ื” ืœื ื›ืœ ื›ืš ื’ืจื•ืข
add(int index, E element) O(n) , n/2 ืฆืขื“ื™ื ื‘ืžืžื•ืฆืข
remove(int index) O(n) , n/2 ืฆืขื“ื™ื ื‘ืžืžื•ืฆืข
Iterator.remove() O(n) , n/2 ืฆืขื“ื™ื ื‘ืžืžื•ืฆืข
ListIterator.add(ืืœืžื ื˜ E) O(n) , n/2 ืฆืขื“ื™ื ื‘ืžืžื•ืฆืข

ืžืชื™ ืœื”ืฉืชืžืฉ ื‘-LinkedList: ื“ื•ื’ืžื”

ื‘ื”ื—ืœื˜, ArrayList ื”ื•ื ื”ื™ื™ืฉื•ื ื”ืคื•ืคื•ืœืจื™ ื‘ื™ื•ืชืจ ืฉืœ List . ืขื ื–ืืช, ืืชื” ืขืœื•ืœ ืœืคื’ื•ืฉ ืืช ื”ืžืฆื‘ื™ื ืฉื‘ื”ื ื™ืฉ ืฆื•ืจืš ื‘ืคืขื•ืœื•ืช ื”ื”ื•ืกืคื”/ื”ืกืจื” ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืžื“ื™. ื‘ืžืงืจื” ื›ื–ื”, LinkedList ื‘ื™ื—ื“ ืขื Iterator ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื•ืขื™ืœ. ื”ื ื” ื“ื•ื’ืžื. ื™ืฉ ืœื ื• ืจืฉื™ืžื” ืืจื•ื›ื”, ื•ืขืœื™ื ื• ืœืžื—ื•ืง ื›ืœ ืจื›ื™ื‘ ืžื”ืจืฉื™ืžื” ื”ื–ื•. ื‘ื•ื ื ืขืฉื” ืืช ื”ืžืฉื™ืžื” ื”ื–ื• ืขื ArrayList ื•- LinkedList + Iterator . ืื ื• ืžืฉื•ื•ื™ื ืืช ื”ื–ืžืŸ ืฉืœ ื›ืœ ืคืขื•ืœื” ื•ืžื“ืคื™ืกื™ื ืื•ืชื• ืœืชื•ืš ื”ืžืกื•ืฃ. ื”ื ื” ื”ืงื•ื“:

import java.util.*;
import java.util.function.BiPredicate;
 
public class ListTest2 {
 
   static void removeElements(List<Double> list, BiPredicate<Integer, Double> predicate) {
       // start navigation from end to preserve indexes of removed items
       ListIterator<Double> iterator = list.listIterator(list.size());
 
       while (iterator.hasPrevious()) {
           Double element = iterator.previous();
           if (predicate.test(iterator.previousIndex()+1, element)) {
               iterator.remove();
           }
       }
   }
 
   static class TestCase1 {
       public static void main(String[] args) {
           LinkedList<Double> testedList1 = new LinkedList<>(Arrays.asList(2.0,9.0,3.0,12.0,5.0));
           removeElements(testedList1, (index, value) -> (value % 3 == 0));
           // should print `[2.0, 5.0]`
           System.out.println("testedList1 after removeElements(..): " + testedList1);
 
           ArrayList<Double> testedList2 = new ArrayList<>(Arrays.asList(2.0,9.0,3.0,12.0,5.0));
           removeElements(testedList2, (index, value) -> (value % 3 == 0));
           // should print `[2.0, 5.0]`
           System.out.println("testedList2 after removeElements(..): " + testedList2);
       }
   }
 
   static class TestLinkedListPerformance {
       public static void main(String[] args) {
           LinkedList<Double> testedList = new LinkedList<>();
           System.out.println("start filling testedList");
           for (int i = 0; i < 2 * 1000 * 1000 ; ++i) {
               testedList.add((double)i);
           }
 
           System.out.println("start treating testedList");
           long startTime = System.nanoTime();
           removeElements(testedList, (index, value) -> (value % 3 == 0));
           long endTime = System.nanoTime();
           // should print `1333333`
           System.out.println("testedList.size after removeElements(..): " + testedList.size());
           // could print `0.1527659`
           System.out.println("removeElements(..) takes (seconds): " + ((double)(endTime - startTime)) / 1000000000);
       }
   }
 
   static class TestArrayListPerformance {
       public static void main(String[] args) {
           ArrayList<Double> testedList = new ArrayList<>();
           System.out.println("start filling testedList");
           for (int i = 0; i < 2 * 1000 * 1000 ; ++i) {
               testedList.add((double)i);
           }
 
           System.out.println("start treating testedList");
           long startTime = System.nanoTime();
           removeElements(testedList, (index, value) -> (value % 3 == 0));
           long endTime = System.nanoTime();
           // should print `1333333`
           System.out.println("testedList.size after removeElements(..): " + testedList.size());
           // could print `53.4952635`
           System.out.println("removeElements(..) takes (seconds): " + ((double)(endTime - startTime)) / 1000000000);
       }
   }
}
ืชื•ืฆืื” ืขื‘ื•ืจ ArrayList:

start filling testedList
start treating testedList
testedList.size after removeElements(..): 1333333
removeElements(..) takes (seconds): 481.8824414
ืชื•ืฆืื” ืขื‘ื•ืจ LinkedList:

start filling testedList
start treating testedList
testedList.size after removeElements(..): 1333333
removeElements(..) takes (seconds): 0.4586458
ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ื‘ืžืงืจื” ื–ื” LinkedList ื”ื•ื ื”ืจื‘ื” ื™ื•ืชืจ ื™ืขื™ืœ. ื‘ื•ื ื ื”ื™ื” ื›ื ื™ื. ื‘ืคื™ืชื•ื— ืชื•ื›ื ื” ืืžื™ืชื™ ื”ืฉื™ืžื•ืฉ ื‘-LinkedList ื”ื•ื ืกื•ื’ ืฉืœ ืื™ืจื•ืข ื ื“ื™ืจ. ืขื ื–ืืช, ืื™ืฉ ืžืงืฆื•ืข ืฆืจื™ืš ืœื“ืขืช ืขืœ ืงื™ื•ืžื• ืฉืœ ืžื‘ื ื” ื ืชื•ื ื™ื ื–ื” ื•ืขืœ ื™ืชืจื•ื ื•ืชื™ื•. ืื ื‘ืงื•ื“ ืืžื™ืชื™ LinkedList ื”ื•ื ืื•ืจื— ื ื“ื™ืจ, ื‘ืจืื™ื•ื ื•ืช Java Junior ื–ื” ืžืื•ื“ ืคื•ืคื•ืœืจื™. ื•ืขื“ื™ื™ืŸ, ื”ื ื” ืžื” ืฉื›ืชื‘ ื™ื”ื•ืฉืข ื‘ืœื•ืš ืขืœ LinkedList : LinkedList Java ืžื‘ื ื” ื ืชื•ื ื™ื - 4

AddOn: ืจืฉื™ืžื” ืžืงื•ืฉืจืช ื™ื—ื™ื“ื” ืฉืœ Java

ืื™ืŸ ืจืฉื™ืžื” ืžืงื•ืฉืจืช ื™ื—ื™ื“ื” ื‘ื™ืŸ ื”ืื•ืกืฃ ื”ืงืœืืกื™ ื‘ื’'ืื•ื•ื”, ืจืฉื™ืžื” ืžืงื•ืฉืจืช ื™ื—ื™ื“ื” ื”ื™ื ืžื‘ื ื” ืฉื‘ื• ื›ืœ ืฆื•ืžืช ืžื›ื™ืœ ืื•ื‘ื™ื™ืงื˜ ื•ื”ืคื ื™ื” ืœืฆื•ืžืช ื”ื‘ื, ืืš ืœื ืขื‘ื•ืจ ื”ืฆื•ืžืช ื”ืงื•ื“ื. Java LinkedList ื”ื™ื ื“ื•-ืงื™ืฉื•ืจื™ืช, ืื‘ืœ ืืฃ ืื—ื“ ืœื ืžืคืจื™ืข ืœืš ืœื™ืฆื•ืจ ืžื‘ื ื” ื ืชื•ื ื™ื ืžืฉืœืš, ื›ื’ื•ืŸ Singly ,code>Linked List. ืœื”ืœืŸ ืžืกืคืจ ืฉืœื‘ื™ื ืœืคืชืจื•ืŸ ื”ืžืฉื™ืžื•ืช ื”ืœืœื•:
  1. ืฆื•ืจ ืžื—ืœืงืช Node ืขื ืฉืชื™ ืชื›ื•ื ื•ืช, ื ืชื•ื ื™ื ื•ื”ื‘ื. ื”ื‘ื ื”ื•ื ื”ืคื ื™ื” ืœืฆื•ืžืช ื”ื‘ื.
  2. ืฆื•ืจ ืžื—ืœืงื” FirstLast ืขื ืฉืชื™ ืชื›ื•ื ื•ืช, ืจืืฉ ื•ื–ื ื‘.
  3. ืฆื•ืจ ืฉื™ื˜ื” add() ื›ื“ื™ ืœื”ื•ืกื™ืฃ ืฆื•ืžืช ื—ื“ืฉ ืœืจืฉื™ืžื”. ื‘ื“ื•ืง ืื ื”ืจืฉื™ืžื” ืจื™ืงื” ืชื—ื™ืœื” ( head == null ). ืื ื›ืŸ, ืจืืฉ ื•ื–ื ื‘ ืžืชื™ื™ื—ืกื™ื ืœืฆื•ืžืช ื”ื—ื“ืฉ. ืื ื”ืจืฉื™ืžื” ืœื ืจื™ืงื”, ื”ืฆื•ืžืช ื”ื—ื“ืฉ ื™ืชื•ื•ืกืฃ ืœืกื•ืฃ, ื›ืš ืฉื”ืชื›ื•ื ื” ื”ื‘ืื” ืฉืœ ื”ื–ื ื‘ ืžืชื™ื™ื—ืกืช ืœืฆื•ืžืช ืฉื ื•ืกืฃ ื•ื”ืฆื•ืžืช ื”ื—ื“ืฉ ื”ื•ืคืš ืœื–ื ื‘ ื”ืจืฉื™ืžื”.
ืื’ื‘, ืืชื” ื™ื›ื•ืœ ืœื ืกื•ืช ืœื™ืฆื•ืจ LinkedList ืžืฉืœืš ื›ืชืจื’ื™ืœ. ื‘ื”ืฆืœื—ื” ื‘ืœื™ืžื•ื“ืš.
ื”ืขืจื•ืช
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION