Programming/Java
ArrayList and HashMap
hannahchun
2022. 8. 26. 18:31
ArrayList
Unlike the length of an Array, the length of the ArrayList is changeable.
- Can only store objects (primitive types X)
- Less efficient than using an array
ArrayListDemonstrator.java
package edu.handong.csee.java.example;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListDemonstrator {
public static void main(String[] args) {
ArrayListDemonstrator demonstrator = new ArrayListDemonstrator();
demonstrator.run();
}
private void run() {
ArrayList<String> toDoList = new ArrayList<String>();
System.out.println("Enter items for the list, when prompted.");
boolean done = false;
Scanner keyboard = new Scanner(System.in);
while(!done) {
System.out.println("Type an entry: ");
String entry = keyboard.nextLine();
toDoList.add(entry);
System.out.print("More items for the list? ");
String ans = keyboard.nextLine();
if(!ans.equalsIgnoreCase("yes"))
done = true;
}
System.out.println("The list contains: ");
int listSize = toDoList.size();
for(int position = 0 ; position < listSize ; position++)
System.out.println(toDoList.get(position));
keyboard.close();
}
}
Output
IntegerReader.java
package edu.handong.csee.java.example;
import java.util.ArrayList;
import java.util.Scanner;
public class IntegerReader {
public static void main(String[] args) {
IntegerReader intReader = new IntegerReader();
intReader.run();
}
public void run() {
ArrayList<Integer> intNumbers = getIntegerNumbers();
printOutIntegerNumbers(intNumbers);
}
public ArrayList<Integer> getIntegerNumbers() {
ArrayList<Integer> intNumbers = new ArrayList<Integer>() ;
System.out.println("Put integer numbers in one line (seperator is space): ");
Scanner myScanner = new Scanner(System.in);
String lineWithMultipleIntegerNumbers = myScanner.nextLine();
for(String currentStringNumber : lineWithMultipleIntegerNumbers.split(" ")) {
intNumbers.add(Integer.parseInt(currentStringNumber));
}
myScanner.close();
return intNumbers;
}
public void printOutIntegerNumbers(ArrayList<Integer> intNumbers) {
System.out.println("The number of integer numbers from you: " + intNumbers.size());
for(Integer currentInteger:intNumbers) {
System.out.println(currentInteger);
}
}
}
Output
Copying an ArrayList
Shallow copy
: use the assignment statement -> copies the reference of the object
Deep copy
: use the clone method
DeepCopyTester.java
package edu.handong.csee.java.example;
import java.util.ArrayList;
import java.util.Collections;
public class DeepCopyTester {
public static void main(String[] args) {
DeepCopyTester tester = new DeepCopyTester();
tester.run();
}
public void run() {
IntegerReader intReader = new IntegerReader();
ArrayList<Integer> intNumbers = intReader.getIntegerNumbers();
// Shallow Copy
ArrayList<Integer> intNumbersCopiedShallowly = intNumbers;
intReader.printOutIntegerNumbers(intNumbersCopiedShallowly);
intNumbersCopiedShallowly.add(0);
intReader.printOutIntegerNumbers(intNumbers);
// intNumbers also has 0 as intNumbersCopiedShallowly is a reference to the object intNumbers
// Deep Copy
ArrayList<Integer> intNumbersDeeplyCopied = (ArrayList<Integer>) intNumbers.clone();
intNumbersDeeplyCopied.add(1);
intReader.printOutIntegerNumbers(intNumbers);
// intNumbers does not have 0, as intNumbersDeeplyCopied does not refer to the object intNumbers anymore
Collections.sort(intNumbersDeeplyCopied);
intReader.printOutIntegerNumbers(intNumbers);
// elements in intNumbers are not sorted
System.out.println("Sorted ArrayList: ");
intReader.printOutIntegerNumbers(intNumbersDeeplyCopied);
// elements in intNumbersDeeplyCopied are sorted
}
}
Output
Collection Framework and Hashmap
HashMapExample.java
package edu.handong.csee.java.example;
import java.util.*;
public class HashMapExample {
String[] data = {"ITP20006,JC NAM",
"ITP20006,JD Kim",
"ITP20006,JE Park",
"ITP20006,JF Seo",
"ITP40001,HA Seo",
"ITP40002,HA Park",
"ITP40002,HW Nam"};
public static void main(String[] args) {
HashMapExample example = new HashMapExample();
example.run();
}
private void run() {
HashMap<String, ArrayList<String>> namesByCourse = new HashMap<String, ArrayList<String>>();
for(String line : data) {
String[] values = line.split(",");
String courseCode = values[0];
String studentName = values[1];
if(namesByCourse.containsKey(courseCode)) {
namesByCourse.get(courseCode).add(studentName);
}else {
ArrayList<String> names = new ArrayList<String>();
names.add(studentName);
namesByCourse.put(courseCode, names);
}
}
Map<String, ArrayList<String>> sortedMap = new TreeMap(namesByCourse);
// The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used.
// This proves to be an efficient way of sorting and storing the key-value pairs.
// https://www.geeksforgeeks.org/treemap-in-java/
for(String key : sortedMap.keySet()) {
System.out.println(key + " " + namesByCourse.get(key).size());
}
}
}
Output
Message.java
package edu.handong.csee.java.example.data;
public class Message {
private String writer;
private String message;
public Message(String originalMessage) {
String[] splitMessage = originalMessage.split(",");
writer = splitMessage[0].trim();
message = splitMessage[1].trim();
}
/**
* @return the writer
*/
public String getWriter() {
return writer;
}
/**
* @param writer the writer to set
*/
public void setWriter(String writer) {
this.writer = writer;
}
/**
* @return the message
*/
public String getMessage() {
return message;
}
/**
* @param message the message to set
*/
public void setMessage(String message) {
this.message = message;
}
}
MessageCounterByWriter.java
package edu.handong.csee.java.example;
import java.util.ArrayList;
import java.util.HashMap;
import edu.handong.csee.java.example.data.Message;
public class MessageCounterByWriter {
String[] messages = {"JC, Test", "YH, Good","JC, Test 2", "JH, Message2"};
public static void main(String[] args) {
MessageCounterByWriter counter = new MessageCounterByWriter();
counter.run();
}
private void run() {
HashMap<String, ArrayList<String>> myMap = new HashMap<String, ArrayList<String>>();
for(String message : messages) {
Message newMessage = new Message(message);
if(myMap.containsKey(newMessage.getWriter())) {
ArrayList<String> currentList = myMap.get(newMessage.getWriter());
currentList.add(newMessage.getMessage());
} else {
myMap.put(newMessage.getWriter(), new ArrayList<String>());
myMap.get(newMessage.getWriter()).add(newMessage.getMessage());
}
}
for(String key : myMap.keySet()) {
System.out.println(key + "'s messages:");
System.out.println(myMap.get(key).size() + " message(s)!");
for(String message : myMap.get(key)) {
System.out.println(message);
}
System.out.println();
}
}
}
Output