Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Spatial Partition] (Fix) Issue #2544: Can not run App.java & some logs are wrong #2545

Merged
merged 2 commits into from
Aug 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@
package com.iluwatar.spatialpartition;

import java.security.SecureRandom;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import lombok.extern.slf4j.Slf4j;

/**
Expand Down Expand Up @@ -59,9 +60,8 @@

@Slf4j
public class App {
private static final String BUBBLE = "Bubble ";

static void noSpatialPartition(int numOfMovements, HashMap<Integer, Bubble> bubbles) {
static void noSpatialPartition(int numOfMovements, Map<Integer, Bubble> bubbles) {
//all bubbles have to be checked for collision for all bubbles
var bubblesToCheck = bubbles.values();

Expand All @@ -77,11 +77,11 @@ static void noSpatialPartition(int numOfMovements, HashMap<Integer, Bubble> bubb
numOfMovements--;
}
//bubbles not popped
bubbles.keySet().stream().map(key -> BUBBLE + key + " not popped").forEach(LOGGER::info);
bubbles.keySet().forEach(key -> LOGGER.info("Bubble {} not popped", key));
}

static void withSpatialPartition(
int height, int width, int numOfMovements, HashMap<Integer, Bubble> bubbles) {
int height, int width, int numOfMovements, Map<Integer, Bubble> bubbles) {
//creating quadtree
var rect = new Rect(width / 2D, height / 2D, width, height);
var quadTree = new QuadTree(rect, 4);
Expand All @@ -100,7 +100,7 @@ static void withSpatialPartition(
numOfMovements--;
}
//bubbles not popped
bubbles.keySet().stream().map(key -> BUBBLE + key + " not popped").forEach(LOGGER::info);
bubbles.keySet().forEach(key -> LOGGER.info("Bubble {} not popped", key));
}

/**
Expand All @@ -110,15 +110,15 @@ static void withSpatialPartition(
*/

public static void main(String[] args) {
var bubbles1 = new HashMap<Integer, Bubble>();
var bubbles2 = new HashMap<Integer, Bubble>();
var bubbles1 = new ConcurrentHashMap<Integer, Bubble>();
var bubbles2 = new ConcurrentHashMap<Integer, Bubble>();
var rand = new SecureRandom();
for (int i = 0; i < 10000; i++) {
var b = new Bubble(rand.nextInt(300), rand.nextInt(300), i, rand.nextInt(2) + 1);
bubbles1.put(i, b);
bubbles2.put(i, b);
LOGGER.info(BUBBLE, i, " with radius ", b.radius,
" added at (", b.coordinateX, ",", b.coordinateY + ")");
LOGGER.info("Bubble {} with radius {} added at ({},{})",
i, b.radius, b.coordinateX, b.coordinateY);
}

var start1 = System.currentTimeMillis();
Expand All @@ -127,8 +127,7 @@ public static void main(String[] args) {
var start2 = System.currentTimeMillis();
App.withSpatialPartition(300, 300, 20, bubbles2);
var end2 = System.currentTimeMillis();
LOGGER.info("Without spatial partition takes ", (end1 - start1), "ms");
LOGGER.info("With spatial partition takes ", (end2 - start2), "ms");
LOGGER.info("Without spatial partition takes {} ms", (end1 - start1));
LOGGER.info("With spatial partition takes {} ms", (end2 - start2));
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

import java.security.SecureRandom;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;

/**
Expand Down Expand Up @@ -58,13 +58,12 @@ boolean touches(Bubble b) {
<= (this.radius + b.radius) * (this.radius + b.radius);
}

void pop(HashMap<Integer, Bubble> allBubbles) {
LOGGER.info("Bubble ", this.id,
" popped at (", this.coordinateX, ",", this.coordinateY, ")!");
void pop(Map<Integer, Bubble> allBubbles) {
LOGGER.info("Bubble {} popped at ({},{})!", this.id, this.coordinateX, this.coordinateY);
allBubbles.remove(this.id);
}

void handleCollision(Collection<? extends Point> toCheck, HashMap<Integer, Bubble> allBubbles) {
void handleCollision(Collection<? extends Point> toCheck, Map<Integer, Bubble> allBubbles) {
var toBePopped = false; //if any other bubble collides with it, made true
for (var point : toCheck) {
var otherId = point.id;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
package com.iluwatar.spatialpartition;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
* The abstract Point class which will be extended by any object in the field whose location has to
Expand Down Expand Up @@ -65,5 +65,5 @@ public abstract class Point<T> {
* @param toCheck contains the objects which need to be checked
* @param all contains hashtable of all points on field at this time
*/
abstract void handleCollision(Collection<? extends Point> toCheck, HashMap<Integer, T> all);
abstract void handleCollision(Collection<? extends Point> toCheck, Map<Integer, T> all);
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@
package com.iluwatar.spatialpartition;

import java.util.Collection;
import java.util.Hashtable;
import java.util.HashMap;
import java.util.Map;

/**
* The quadtree data structure is being used to keep track of the objects' locations. It has the
Expand All @@ -37,7 +38,7 @@ public class QuadTree {
Rect boundary;
int capacity;
boolean divided;
Hashtable<Integer, Point> points;
Map<Integer, Point> points;
QuadTree northwest;
QuadTree northeast;
QuadTree southwest;
Expand All @@ -47,7 +48,7 @@ public class QuadTree {
this.boundary = boundary;
this.capacity = capacity;
this.divided = false;
this.points = new Hashtable<>();
this.points = new HashMap<>();
this.northwest = null;
this.northeast = null;
this.southwest = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
package com.iluwatar.spatialpartition;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
* This class extends the generic SpatialPartition abstract class and is used in our example to keep
Expand All @@ -34,10 +34,10 @@

public class SpatialPartitionBubbles extends SpatialPartitionGeneric<Bubble> {

private final HashMap<Integer, Bubble> bubbles;
private final Map<Integer, Bubble> bubbles;
private final QuadTree bubblesQuadTree;

SpatialPartitionBubbles(HashMap<Integer, Bubble> bubbles, QuadTree bubblesQuadTree) {
SpatialPartitionBubbles(Map<Integer, Bubble> bubbles, QuadTree bubblesQuadTree) {
this.bubbles = bubbles;
this.bubblesQuadTree = bubblesQuadTree;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
*/
package com.iluwatar.spatialpartition;

import java.util.Hashtable;
import java.util.Map;

/**
* This abstract class has 2 fields, one of which is a hashtable containing all objects that
Expand All @@ -35,7 +35,7 @@

public abstract class SpatialPartitionGeneric<T> {

Hashtable<Integer, T> playerPositions;
Map<Integer, T> playerPositions;
QuadTree quadTree;

/**
Expand Down