Связанный список
Связанный список представляет собой линейную последовательность объектов, называемых узлами, узлы соединены между собой посредством ссылок.
Как правило, программа получает доступ к связанному списку через первый элемент списка. Доступ к каждому последующему элементу осуществляется через ссылку, сохраненную в предыдущем узле. По соглашению, ссылка в последнем узле устанавливается в NULL для обозначения конца списка. Данные хранятся в связанном списке динамически, т.е. программа создает для каждый следующий узел по мере необходимости. Узел может содержать данные любого типа, включая ссылки на объекты других классов. Стеки и очереди являются также линейными структуры данных и представляют собой ограниченный вариант связанных списков. Деревья — это нелинейные структуры данных.
Данные последовательности могут храниться в массивах, но связные списки обеспечивают ряд преимуществ. Связанный список-это уместно, если число элементов данных, которые будут представлены в структуре данных непредсказуем. Связные списки являются динамическими, поэтому длина списка может увеличиваться или уменьшаться по мере необходимости. Размер «обычного» массива в java не может быть изменен, потому что размер массива фиксируется в тот момент, когда программа создает массив.
Пакет java.util содержит класс LinkedList для реализации и управления связанными списками, которые расширяются или уменьшаются по ходу выполнения программы.
В этом примере рассмотрим действия со связанными списками.
package java1; import java.util.List; import java.util.LinkedList; import java.util.ListIterator; public class Test { private static final String stringarray[] = { "Moscow", "Paris", "Zurich", "Budapest", "Praha", "Wien" }; private static final String stringarray2[] = { "Pekin", "Tokio", "Sydney", "Kair", "Berlin", "Toronto" }; public Test() { List< String > list1 = new LinkedList< String >(); List< String > list2 = new LinkedList< String >(); // добавим элементы в список for ( String sity : stringarray ) list1.add( sity ); // add elements to list link2 for ( String sity : stringarray2 ) list2.add( sity ); list1.addAll( list2 ); // совмещение списков list2 = null; // освобождение ресурсов printList( list1 ); // печать элементов списка list1 convertToUppercaseStrings( list1 ); // перевод в верхний регистр printList( list1 ); // печать элементов списка list1 System.out.print( "\nDeleting elements 2 to 6..." ); removeItems( list1, 2, 7 ); // удалить элементы 2-7 из списка printList( list1 ); // печать элементов списка list1 printReversedList( list1 ); // печать элементов списка list1 в обратном порядке } // конец конструктора класса // метод вывода на печать public void printList( List< String > list ) { System.out.println( "\nlist: " ); for ( String sity : list ) System.out.printf( "%s ", sity ); System.out.println(); } // конец метода вывода на печать // метод перевода в верхний регистр private void convertToUppercaseStrings( List< String > list ) { ListIterator< String > iterator = list.listIterator(); while ( iterator.hasNext() ) { String sity = iterator.next(); iterator.set( sity.toUpperCase() ); // конвертировать в верхний регистр } // end while } // создать дочерний список и используя метод clear удалить элементы private void removeItems( List< String > list, int start, int end ) { list.subList( start, end ).clear(); // удалить элементы } // метод печати элементов в обратном порядке private void printReversedList( List< String > list ) { ListIterator< String > iterator = list.listIterator( list.size() ); System.out.println( "\nReversed List:" ); // напечатать список в обратном порядке while ( iterator.hasPrevious() ) System.out.printf( "%s ", iterator.previous() ); } // end method printReversedList public static void main( String args[] ) { new Test(); } // end main } // конец класса Test
Результат выполнения программы:
list: Moscow Paris Zurich Budapest Praha Wien Pekin Tokio Sydney Kair Berlin Toronto list: MOSCOW PARIS ZURICH BUDAPEST PRAHA WIEN PEKIN TOKIO SYDNEY KAIR BERLIN TORONTO Deleting elements 2 to 6... list: MOSCOW PARIS TOKIO SYDNEY KAIR BERLIN TORONTO Reversed List: TORONTO BERLIN KAIR SYDNEY TOKIO PARIS MOSCOW