В этой статье, мы узнаем о трех важных классах — коллекций ArrayList, Vector и HashMap из Collections Framework и начнем использовать их в собственном коде.
Используя классы — коллекции
ArrayList
и Vector
, мы можем хранить группу элементов, в виде простых объектов и манипулировать ими, посредством различных методов, доступных в этих классах. Классы ArrayList
и Vector
доступны из пакете java.util
.
Другой класс — коллекция доступный из пакета java.util
, это HashMap
, который позволяет хранить коллекцию отображений: ключ – значение. Это дает возможность получать нужное значение из коллекции, когда известен ключ. Давайте рассмотрим примеры с использованием этих классов – коллекций по очереди.
Пример 1. В этом примере мы напишем простую программу с использованием класса — коллекции ArrayList
Листинг 1. Код выполнения примера 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();
}
// метод выводит позицию элемента ‘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);
}
}
Запуск этой программы приведет к следующему выводу:
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
Давайте разберем пример приведенной программы, шаг за шагом.
В этом примере, в первой же строке программы, мы импортируем класс — коллекцию ArrayList
.
Затем, мы по очереди инициализируем массив строк favouriteCharacters
, содержащий имена людей и favouritelist
— экземпляр коллекции ArrayList
.
Метод includeCharacters(args)
может быть условно разделен на две части.
В первой части метода, элементы добавляются из массива в коллекцию с помощью цикла. В этом случае, добавление элементов в ArrayList
производится в том же самом порядке, в каком они расположены в массиве. Это происходит потому, что мы не определяем никаких позиций для элементов, которые добавляются в коллекцию.
Но во второй части нашего метода, элементы добавляются с помощью индексации. В этом случае, добавление элементов в коллекцию производится по точно указанной позиции. При добавлении нового элемента в середину коллекции ArrayList
, уже существующие в этой коллекции элементы, расположенные за указанной позицией вставки нового элемента, сдвигаются на следующие позиции от своих собственных, таким образом увеличивая размер коллекции.
Когда мы взглянем на вывод вначале, мы увидим:
Total No of Characters in List: 10
Total No of Characters in Array: 8
Все потому, что помимо массива, имеющего 8 элементов, которые добавляются в ArrayList
, мы явно добавляем еще 2 элемента, таким образом увеличивая размер коллекции до 10.
Метод getCharacterPosition(args)
принимает значение элемента(имя человека) и выводит позицию этого элемента в коллекции ArrayList
. Если такого элемента нет в ArrayList
, то выводится значение -1.
Метод removeCharacter(args)
удаляет указанное значение элемента(имя человека) из коллекции, принимая в качестве аргумента либо индекс этого элемент, либо сам элемент. В вышеприведенном коде, мы можем заметить, что размер нашей коллекции стал равен 8, вместо 10, по причине того, что мы удалили 2 элемента из коллекции.
Если же размеры массива и коллекции совпадают, то метод возвращает следующие строки:
The element Harry cannot be removed
The element Dumbledore cannot be removed
Выполнение метода removeCharacter(args)
обусловлено только тем, что размер коллекции должен быть больше размера массива.
Пример 2. В этом примере мы напишем простую программу с использованием класса — коллекции Vector
Листинг 2. Код выполнения примере 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();
}
}
Запуск этой программы приведет к следующему выводу:
The characters are Weasley
The characters are Potter
Вышеприведенный код, является всего лишь небольшим образцом, приведенным в качестве доказательства того, что нет большой разницы между коллекциями ArrayList
и Vector
. Коллекцией Vector
можно манипулировать также, как и коллекцией ArrayList
, используя те же методы.
Пример 3. В этом примере мы напишем простую программу с использованием класса — коллекции HashMap
Листинг 3. Код выполнения примера 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();
}
}
Запуск этой программы приведет к следующему выводу:
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
Давайте разберем код программы приведенной выше, шаг за шагом.
В этом примере программы, мы имеем массив строк , элементы которого — названия известных книг. Метод mapAuthors()
создает отображение названий книг с их авторами. Ключами здесь являются названия книг, а значениями — авторы этих книг. Когда вызывается метод getBookList()
, он выполняет итерацию массива Books
и получает по очереди названия книг. Далее метод проверяет имеет ли какая-нибудь книга своего автора. Как мы можем заметить, если метод не может найти автора книги, то выводится сообщение not available
. В противном случае выводится один за другим автор и его книга.
Заключение:
В приведенной статье, мы немного изучили классы — коллекции ArrayList
, Vector
, HashMap
и попробовали использовать их в собственном коде.
Оригинал статьи: How to use ArrayList, Vector and HashMap classes provided by Java Collections Framework
Вот и вся разница между ArrayList и Vector.