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