Skip to content

Commit

Permalink
[Spatial Partition] (Fix) Issue #2544
Browse files Browse the repository at this point in the history
- ConcurrentModificationException
- Wrong log
- Log using formatting anchor
  • Loading branch information
tiennm99 committed Jun 27, 2023
1 parent 5b147b0 commit 0025ac7
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 21 deletions.
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 @@ -61,7 +62,7 @@
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 +78,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 +101,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 +111,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 +128,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 @@ -26,6 +26,7 @@

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 +35,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

0 comments on commit 0025ac7

Please sign in to comment.