Sortowanie tablicy

0

Dobry Wieczór

Potrzebuję sortować tablicę "array" w metodzie getArray() ale tak aby nie zmieniać w niej nic. W kodzie który napisałem po pierwszym sortowaniu wyniki zapisują się i nie można uzyskać wtedy pierwotnej tablicy.

public class Books implements Serializable
{

	private int methodSort;
	private Node[] array =
	{
		new Node("Adam", "sliwka"), new Node("Jakub", "małpa"), new Node("Marek", "banan"), new Node("Arkadiusz", "bocian")
	};

	public Node[] getArray()
	{
		Node[] p = array;
		
		switch (methodSort)
		{
			case 1:
				Arrays.sort(p);
				break;
			case 2:
				Arrays.sort(p);
				break;
			default:
				break;
		}

		return array;
	}

	public void setArray(Node[] array)
	{
		this.array = array;
	}

	public int getMethodSort()
	{
		return methodSort;
	}

	public void setMethodSort(int methodSort)
	{
		this.methodSort = methodSort;
	}

	public class Node implements Comparable<Node>
	{

		private String author;
		private String title;

		public Node(String author, String title)
		{
			this.author = author;
			this.title = title;
		}

		public String getAuthor()
		{
			return author;
		}

		public void setAuthor(String author)
		{
			this.author = author;
		}

		public String getTitle()
		{
			return title;
		}

		public void setTitle(String title)
		{
			this.title = title;
		}

		@Override
		public int compareTo(Node n)
		{
			return author.compareTo(n.author);
		}
	}
}

Dla tablicy o dużym rozmiarze lepiej trzymać posortowane dane w pamięci jeśli często wywołuję metodę getArray()?

Proszę o pomoc, z góry dziękuję.

0

Nie można zjeść ciasteczka i mieć ciasteczko. Nie możesz posortować i jednocześnie niczego nie zmienić. Chyba, że chcesz mieć oryginał, a sortować chcesz kopię.

0

Może źle myślę ale wydawało mi się, że sortuję referencję tablicy, a nie jej wartości. W tym wypadku zawsze mam kopiować całą tablicę, a następnie sortować?

0

Tak, po przypisaniu

Node[] p = array;

p oraz array są referencjami do tej samej tablicy. Arrays.sort(array) i Arrays.sort(p) robią dokładnie to samo.

0

sortuję referencję tablicy, a nie jej wartości

Jak można sortować referencję? Wiesz co to w ogóle jest referencja? Podpowiedź: to coś jak wskaźnik, zmienna przechowująca adres.

0

Ok, już rozumiem. Źle sobie to wyobraziłem. Myślałem, że Node[] p; to tablica referencji które można sortować tak jak tablicę wskaźników stąd te problemy.

0

Node[] p; to referencja do tablicy referencji. W Javie wszystko co nie jest prymitywem jest referencją, a co za tym idzie, prymitywy zawsze przekazuje się przez wartość, a nie-prymitywy przez referencję. Tablica (czegokolwiek) jest w Javie obiektem.

public class Main {

    public static void main(String[] args) {
        System.out.println(new int[0] instanceof Object);
    }
}

Inaczej mówiąc: jeśli coś dziedziczy po Object to jest przekazywane przez referencję, a jeśli nie dziedziczy (prymitywy po niczym nie dziedziczą) to jest przekazywane przez wartość.

1 użytkowników online, w tym zalogowanych: 0, gości: 1