Skip to content

Instantly share code, notes, and snippets.

View ThanawatMas's full-sized avatar

Aouoho ThanawatMas

View GitHub Profile
@ThanawatMas
ThanawatMas / ConcurrentModificationProblem.java
Last active May 20, 2018 14:50
ConcurrentModification Experiment
public abstract class ConcurrentModificationProblem implements ConcurrentModificationSolvable {
public final ArrayList<String> experimentData() {
ArrayList<String> roundList = new ArrayList<>();
roundList.add("A");
roundList.add("B");
roundList.add("C");
roundList.add("D");
return roundList;
}
@ThanawatMas
ThanawatMas / ConcurrentModificationSolution.java
Created May 20, 2018 14:52
ConcurrentModificationSolution
public abstract class ConcurrentModificationSolution extends ConcurrentModificationProblem {
final void solve() {
ArrayList<String> roundList = experimentData();
String newItem = "C";
System.out.println("************************** Solve by " + solutionName());
System.out.println("Before : " + roundList);
try {
long start = System.currentTimeMillis();
@ThanawatMas
ThanawatMas / SolveByCopyOnWriteArrayList.java
Created May 20, 2018 15:00
SolveByCopyOnWriteArrayList.java
public class SolveByCopyOnWriteArrayList extends ConcurrentModificationSolution {
@Override
public void addItemAndReIndex(List<String> roundItem, String newItem) {
List<String> copyRoundItem = new CopyOnWriteArrayList<>(roundItem);
for(String item: copyRoundItem) {
if(item.equals(newItem)) {
roundItem.remove(item);
}
}
@ThanawatMas
ThanawatMas / SolveByCopyToRemove.java
Created May 20, 2018 15:05
SolveByCopyToRemove.java
public class SolveByCopyToRemove extends ConcurrentModificationSolution {
@Override
public void addItemAndReIndex(List<String> roundList, String newItem) {
ArrayList<String> copy = new ArrayList<>();
for (String item : roundList) {
if (item.equals(newItem)) {
copy.add(item);
}
}
@ThanawatMas
ThanawatMas / SolveByInnosense.java
Created May 20, 2018 15:07
SolveByInnosense.java
public class SolveByInnosense extends ConcurrentModificationSolution {
@Override
public void addItemAndReIndex(List<String> roundList, String newItem) {
for (String item : roundList) {
if (item.equals(newItem)) {
roundList.remove(item);
roundList.add(0, newItem);
}
}
@ThanawatMas
ThanawatMas / SolveBySomeSense.java
Created May 20, 2018 15:09
SolveBySomeSense.java
public class SolveBySomeSense extends ConcurrentModificationSolution {
@Override
public void addItemAndReIndex(List<String> roundList, String newItem) {
for (String item : roundList) {
if (item.equals(newItem)) {
roundList.remove(item);
roundList.add(0, newItem);
break;
}
@ThanawatMas
ThanawatMas / SolveByIterator.java
Created May 20, 2018 15:11
SolveByIterator.java
public class SolveByIterator extends ConcurrentModificationSolution {
@Override
public void addItemAndReIndex(List<String> roundItem, String newItem) {
Iterator iterator = roundItem.iterator();
while(iterator.hasNext()) {
String item = (String) iterator.next();
if(item.equals(newItem)) {
iterator.remove();
break;
@ThanawatMas
ThanawatMas / SolveByJava8RemoveIf.java
Created May 20, 2018 15:14
SolveByJava8RemoveIf.java
public class SolveByJava8RemoveIf extends ConcurrentModificationSolution {
@Override
public void addItemAndReIndex(List<String> roundList, String newItem) {
roundList.removeIf(item -> item.equals(newItem));
roundList.add(0, newItem);
}
@Override
public String solutionName() {
@ThanawatMas
ThanawatMas / SolveByJava8Stream.java
Last active May 22, 2018 01:12
SolveByJava8Stream.java
import static java.util.stream.Collectors.toList;
public class SolveByJava8Stream extends ConcurrentModificationSolution {
@Override
public void addItemAndReIndex(List<String> roundList, String newItem) {
roundList = roundList
.stream()
.filter(item -> !item.equals(newItem))
.map(Object::toString)
@ThanawatMas
ThanawatMas / SolveByJava8Stream.java
Last active May 22, 2018 01:12
SolveByJava8Stream Check Value
import static java.util.stream.Collectors.toList;
public class SolveByJava8Stream extends ConcurrentModificationSolution {
@Override
public void addItemAndReIndex(List<String> roundList, String newItem) {
System.out.println("Before roundListIdentity=" + System.identityHashCode(roundList));
roundList = roundList
.stream()
.filter(item -> !item.equals(newItem))