W tym artykule poznamy trzy ważne klasy kolekcji ArrayList , Vector i HashMap z Collections Framework i zaczniemy używać ich w naszym własnym kodzie. Korzystając z klas kolekcji
ArrayList
i kolekcji Vector
, możemy przechowywać grupę elementów w postaci prostych obiektów i manipulować nimi za pomocą różnych metod dostępnych w tych klasach. Zajęcia ArrayList
i Vector
dostępne są w pakiecie java.util
. Kolejną klasą jest kolekcja dostępna z pakietu java.util
, HashMap
która umożliwia przechowywanie kolekcji odwzorowań klucz-wartość. Dzięki temu możliwe jest uzyskanie żądanej wartości ze zbioru, gdy znany jest klucz. Przyjrzyjmy się przykładom użycia tych klas kolekcji, jeden po drugim. Przykład 1. W tym przykładzie napiszemy prosty program wykorzystujący klasę - kolekcję ArrayList Listing 1. Kod wykonania dla przykładu 1
// подключаем класс
import java.util.ArrayList;
public class ArrayListExample {
static String[] favouriteCharacters = {"Harry", "Ron", "Hermione", "Snape", "Dumbledore", "Moody", "Riddle", "Fred"};
int i;
public ArrayList favouritelist = new ArrayList();
// метод добавляет элементы ‘favouriteCharacters’ в ‘favouritelist’
private void includeCharacters(String[]favouriteCharacters)
{
for (i = 0; i < favouriteCharacters.length; i++) {
// добавление элементов по одному из массива ‘favouriteCharacters’
favouritelist.add(favouriteCharacters[i]);
printCharacters(i);
}
// добавление элементов, посредством указания позиций
favouritelist.add(1, "george");
favouritelist.add(4, "Peter");
}
// метод выводит элемент ‘favouritelist’ по указанной позиции
private void printCharacters(int i) {
System.out.println("Character " + (i + 1) + ":" + favouritelist.get(i));
}
// метод выводит все элементы ‘favouritelist’
private void printCharacters() {
System.out.println("\n");
for(int i=0;i<favouritelist.size();i++){
System.out.println("Character" + (i + 1) + ":" + favouritelist.get(i));
} }
// метод возвращает размер коллекции ‘favouritelist’
private int sizeofCharactersList() {
System.out.println("\n");
System.out.println("Total No of Characters in Array:" + favouriteCharacters.length);
System.out.println("Total No of Characters in List:" + favouritelist.size());
return favouritelist.size();
}
// метод выводит позицию element ‘favouritelist’ по указанному имени
public void getCharacterPostion(String characterName) {
System.out.println("\n");
System.out.println("The position of the character\t" + characterName + "\tis\t" + favouritelist.indexOf(characterName));
}
// метод удаляет элемент ‘favouritelist’ по указанному имени
public void removeCharacter(String characterName) {
if(favouritelist.size()>favouriteCharacters.length){
favouritelist.remove(characterName);
}
else{
System.out.println("\n");
System.out.println("The element\t"+favouritelist.get(favouritelist.indexOf(characterName))+"\tcannot be removed");
}
}
// метод удаляет элемент ‘favouritelist’ по указанной позиции
public void removeCharacter(int i) {
if(favouritelist.size()>favouriteCharacters.length){
favouritelist.remove(i);
}
else{
System.out.println("The element\t"+favouritelist.get(i)+"\tcannot be removed");
}
}
public static void main(String args[]) {
ArrayListExample example = new ArrayListExample();
example.includeCharacters(favouriteCharacters);
example.printCharacters();
int size = example.sizeofCharactersList();
example.getCharacterPostion("Ron");
example.removeCharacter("Snape");
example.removeCharacter(2);
example.sizeofCharactersList();
example.removeCharacter("Harry");
example.removeCharacter(4);
}
}
Uruchomienie tego programu da następujące dane wyjściowe:
Character 1:Harry
Character 2:Ron
Character 3:Hermione
Character 4:Snape
Character 5:Dumbledore
Character 6:Moody
Character 7:Riddle
Character 8:Fred
Character1:Harry
Character2:george
Character3:Ron
Character4:Hermione
Character5:Peter
Character6:Snape
Character7:Dumbledore
Character8:Moody
Character9:Riddle
Character10:Fred
Total No of Characters in Array:8
Total No of Characters in List:10
The position of the character Ron is 2
Total No of Characters in Array:8
Total No of Characters in List:8
The element Harry cannot be removed
The element Dumbledore cannot be removed
Przyjrzyjmy się przykładowemu programowi, krok po kroku. W tym przykładzie w pierwszej linii programu importujemy klasę - kolekcję ArrayList
. Następnie na zmianę inicjujemy tablicę ciągów znaków favouriteCharacters
zawierającą nazwiska osób i favouritelist
instancję kolekcji ArrayList
. Metodę includeCharacters(args)
można podzielić na dwie części. W pierwszej części metody elementy z tablicy dodawane są do kolekcji za pomocą pętli. W tym przypadku dodawanie elementów do ArrayList
odbywa się w tej samej kolejności, w jakiej znajdują się w tablicy. Dzieje się tak dlatego, że nie definiujemy żadnych pozycji dla elementów dodawanych do kolekcji. Ale w drugiej części naszej metody elementy dodawane są za pomocą indeksowania. W tym przypadku elementy dodawane są do kolekcji dokładnie w określonej pozycji. Gdy do środka kolekcji zostanie dodany nowy element ArrayList
, elementy już istniejące w tej kolekcji, które znajdują się poza określoną pozycją wstawienia nowego elementu, zostaną przesunięte na kolejne pozycje w stosunku do własnych, zwiększając w ten sposób rozmiar kolekcji. Kiedy najpierw spojrzymy na dane wyjściowe, zobaczymy:
Total No of Characters in List: 10
Total No of Characters in Array: 8
Dzieje się tak dlatego, że oprócz tablicy zawierającej 8 elementów, które dodajemy do ArrayList
, jawnie dodajemy jeszcze 2 elementy, zwiększając w ten sposób rozmiar kolekcji do 10. Metoda getCharacterPosition(args)
przyjmuje wartość elementu (imię osoby) i wyświetla pozycję tego elementu w kolekcji ArrayList
. Jeśli w elemencie nie ma takiego elementu ArrayList
, wyświetlana jest wartość -1. Metoda removeCharacter(args)
usuwa określoną wartość elementu (imię osoby) z kolekcji, przyjmując jako argument albo indeks tego elementu, albo sam element. W powyższym kodzie możemy zauważyć, że rozmiar naszej kolekcji wzrósł do 8 zamiast 10 w związku z tym, że usunęliśmy z kolekcji 2 elementy. Jeśli rozmiary tablicy i kolekcji są takie same, metoda zwraca następujące wiersze:
The element Harry cannot be removed
The element Dumbledore cannot be removed
Wykonanie metody removeCharacter(args)
jest uwarunkowane jedynie tym, że rozmiar kolekcji musi być większy od rozmiaru tablicy. Przykład 2. W tym przykładzie napiszemy prosty program wykorzystujący klasę - kolekcję Vector
Listing 2. Kod wykonania dla przykładu 2
// подключаем класс
import java.util.Vector;
public class VectorExample {
Vector vector=new Vector();
public void addCharacterandPrint(){
vector.add("Weasley");
vector.add("Potter");
for(int i=0;i<vector.size();i++){
System.out.println("The characters are\t"+vector.get(i));
}
}
public static void main(String args[]){
VectorExample example=new VectorExample();
example.addCharacterandPrint();
}
}
Uruchomienie tego programu da następujące dane wyjściowe:
The characters are Weasley
The characters are Potter
Powyższy kod jest tylko małą próbką, dostarczoną jako dowód, że nie ma dużej różnicy pomiędzy kolekcjami ArrayList
i Vector
. Kolekcją Vector
można manipulować w taki sam sposób, jak kolekcją ArrayList
, używając tych samych metod. Przykład 3. W tym przykładzie napiszemy prosty program wykorzystując klasę kolekcji HashMap
Listing 3. Kod wykonania dla Przykładu 3
// подключаем класс
import java.util.HashMap;
public class HashMapExample {
HashMap hashMap=new HashMap();
String Books[]={"Famous Five","Goosebumps","Robinson Crusueo","Nancy Drew","The Cell","The Davinci Code","Harry Potter"};
public void mapAuthors(){
hashMap.put("Famous Five","Enid Blyton");
hashMap.put("Goosebumps","R.L.Stine");
hashMap.put("Nancy Drew","Carolyn Keene");
hashMap.put("The Cell","Christopher Pike");
hashMap.put("The Davinci Code","Dan Brown");
hashMap.put("Harry Potter","J.K. Rowling");
}
public void getBookList(){
for(int i=0;i<Books.length;i++){
if(hashMap.containsKey(Books[i])){
System.out.println("Author"+(i+1)+":\t"+hashMap.get(Books[i])+"\t"+Books[i]);
}
else{
System.out.println("\nThe Imformation about the author of the book\t"+Books[i]+"\tis not available\n");
}
}
}
public static void main(String args[]){
HashMapExample hashMapExample=new HashMapExample();
hashMapExample.mapAuthors();
hashMapExample.getBookList();
}
}
Uruchomienie tego programu da następujące dane wyjściowe:
Author1: Enid Blyton Famous Five
Author2: R.L.Stine Goosebumps
The Information about the author of the book Robinson Crusueo is not available
Author4: Carolyn Keene Nancy Drew
Author5: Christopher Pike The Cell
Author6: Dan Brown The Davinci Code
Author7: J.K. Rowling Harry Potter
Przyjrzyjmy się powyższy kod, krok po kroku. W tym przykładowym programie mamy tablicę ciągów, których elementami są nazwy znanych książek. Metoda mapAuthors()
polega na stworzeniu ekspozycji tytułów książek wraz z ich autorami. Kluczem są tutaj tytuły książek, a wartościami autorzy tych książek. Wywołanie metody getBookList()
powoduje iterację po tablicy Books
i pobieranie tytułów książek jeden po drugim. Następnie metoda sprawdza, czy dana książka ma własnego autora. Jak widzimy, jeśli metodą nie uda się znaleźć autora książki, wyświetli się komunikat not available
. W przeciwnym razie autor i jego książka będą wyświetlani jeden po drugim. Wniosek: W tym artykule przestudiowaliśmy trochę klasy - kolekcje ArrayList
i Vector
próbowaliśmy HashMap
użyć ich w naszym własnym kodzie. Artykuł oryginalny: Jak korzystać z klas ArrayList, Vector i HashMap dostarczonych przez Java Collections Framework
GO TO FULL VERSION