Skip to content

Commit eb3b7fa

Browse files
author
Arpit Bhardwaj
committed
Generics in Collections
1 parent 869997b commit eb3b7fa

12 files changed

Lines changed: 326 additions & 0 deletions
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.ab.generics.basic;
2+
3+
public class GenericCircularBuffer<T> {
4+
private T[] buffer;
5+
private int readCursor = 0;
6+
private int writeCursor = 0;
7+
8+
public GenericCircularBuffer(int size) {
9+
this.buffer = (T[]) new Object[size];
10+
}
11+
12+
public boolean offer(T value){
13+
if(buffer[writeCursor] != null){
14+
return false;
15+
}
16+
buffer[writeCursor] = value;
17+
writeCursor = next(writeCursor);
18+
return true;
19+
}
20+
21+
public T poll(){
22+
T value = buffer[readCursor];
23+
if(value != null){
24+
buffer[readCursor] = null;
25+
readCursor = next(readCursor);
26+
}
27+
return value;
28+
}
29+
30+
public int next(int index){
31+
return (index+1)%buffer.length;
32+
}
33+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.ab.generics.basic;
2+
3+
public class StringCircularBuffer {
4+
5+
private String[] buffer;
6+
private int readCursor = 0;
7+
private int writeCursor = 0;
8+
9+
public StringCircularBuffer(int size) {
10+
this.buffer = new String[size];
11+
}
12+
13+
public boolean offer(String value){
14+
if(buffer[writeCursor] != null){
15+
return false;
16+
}
17+
buffer[writeCursor] = value;
18+
writeCursor = next(writeCursor);
19+
return true;
20+
}
21+
22+
public String poll(){
23+
String value = buffer[readCursor];
24+
if(value != null){
25+
buffer[readCursor] = null;
26+
readCursor = next(readCursor);
27+
}
28+
return value;
29+
}
30+
31+
public int next(int index){
32+
return (index+1)%buffer.length;
33+
}
34+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.ab.generics.basic;
2+
3+
public class TypeSafeExample {
4+
public static void main(String[] args) {
5+
GenericCircularBuffer<String> buffer = new GenericCircularBuffer<String>(10);
6+
buffer.offer("a");
7+
buffer.offer("bc");
8+
buffer.offer("d");
9+
10+
//buffer.offer(1); //Leads to compile time error
11+
String value = concatenate(buffer);
12+
System.out.println(value);
13+
}
14+
15+
private static String concatenate(GenericCircularBuffer<String> buffer) {
16+
StringBuilder result = new StringBuilder();
17+
String value;
18+
while((value = buffer.poll()) != null){
19+
result.append(value);
20+
}
21+
return result.toString();
22+
}
23+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.ab.generics.basic;
2+
3+
public class TypeStringExample {
4+
public static void main(String[] args) {
5+
StringCircularBuffer buffer = new StringCircularBuffer(10);
6+
buffer.offer("a");
7+
buffer.offer("bc");
8+
buffer.offer("d");
9+
10+
//buffer.offer(1); //Leads to Compile time error
11+
String value = concatenate(buffer);
12+
System.out.println(value);
13+
}
14+
15+
private static String concatenate(StringCircularBuffer buffer) {
16+
StringBuilder result = new StringBuilder();
17+
String value;
18+
while((value = buffer.poll()) != null){
19+
result.append(value);
20+
}
21+
return result.toString();
22+
}
23+
}

src/main/java/com/ab/generics/basic/TypeUnsafeExample.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public static void main(String[] args) {
77
buffer.offer("bc");
88
buffer.offer("d");
99

10+
//buffer.offer(1); //Leads to ClassCastException
1011
String value = concatenate(buffer);
1112
System.out.println(value);
1213
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.ab.generics.classes_and_interfaces;
2+
3+
import com.ab.generics.model.Person;
4+
5+
import java.util.Comparator;
6+
7+
public class AgeComparator implements Comparator<Person> {
8+
9+
@Override
10+
public int compare(Person o1, Person o2) {
11+
return Integer.compare(o1.getAge(),o2.getAge());
12+
//return -1 * Integer.compare(o1.getAge(),o2.getAge()); for sorting in descending order
13+
}
14+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.ab.generics.classes_and_interfaces;
2+
3+
import java.util.Comparator;
4+
5+
public class ReverseComparator<T> implements Comparator<T> {
6+
7+
private final Comparator<T> delegateComparator;
8+
9+
public ReverseComparator(Comparator<T> delegateComparator) {
10+
this.delegateComparator = delegateComparator;
11+
}
12+
13+
@Override
14+
public int compare(T o1, T o2) {
15+
return -1 * delegateComparator.compare(o1, o2);
16+
}
17+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.ab.generics.classes_and_interfaces;
2+
3+
import com.ab.generics.model.Person;
4+
5+
import java.util.ArrayList;
6+
import java.util.Collections;
7+
import java.util.List;
8+
9+
public class SortingExample {
10+
public static void main(String[] args) {
11+
Person donDrapper = new Person("Don Drapper", 89);
12+
Person peggyOlson = new Person("Peggy Olson", 65);
13+
Person bertCooper = new Person("Bert Cooper", 100);
14+
15+
List<Person> madMen = new ArrayList<>();
16+
madMen.add(donDrapper);
17+
madMen.add(peggyOlson);
18+
madMen.add(bertCooper);
19+
20+
System.out.println(madMen);
21+
22+
Collections.sort(madMen,new AgeComparator());
23+
24+
System.out.println(madMen);
25+
26+
Collections.sort(madMen, new ReverseComparator<>(new AgeComparator()));
27+
28+
System.out.println(madMen);
29+
}
30+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.ab.generics.collections;
2+
3+
import com.ab.generics.model.Person;
4+
5+
import java.util.ArrayList;
6+
import java.util.Iterator;
7+
import java.util.List;
8+
9+
public class ListExamples {
10+
public static void main(String[] args) {
11+
Person donDrapper = new Person("Don Drapper", 89);
12+
Person peggyOlson = new Person("Peggy Olson", 65);
13+
14+
List<Person> madMen = new ArrayList<Person>();
15+
madMen.add(donDrapper);
16+
madMen.add(peggyOlson);
17+
18+
System.out.println(madMen);
19+
20+
madMen.add(new Person("Bert Cooper", 100));
21+
//madMen.add(new Object());
22+
System.out.println(madMen);
23+
24+
for (int i = 0; i < madMen.size(); i++) {
25+
final Person person = madMen.get(i);
26+
System.out.println(person);
27+
}
28+
29+
final Iterator<Person> iterator = madMen.iterator();
30+
while (iterator.hasNext()){
31+
final Person person = iterator.next();
32+
System.out.println(person);
33+
}
34+
35+
for (Person person:madMen) {
36+
System.out.println(person);
37+
}
38+
}
39+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.ab.generics.collections;
2+
3+
import com.ab.generics.model.Person;
4+
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
8+
public class MapExamples {
9+
public static void main(String[] args) {
10+
Person donDrapper = new Person("Don Drapper", 89);
11+
Person peggyOlson = new Person("Peggy Olson", 65);
12+
Person bertCooper = new Person("Bert Cooper", 100);
13+
14+
Map<String, Person> madMen = new HashMap<>();
15+
madMen.put(donDrapper.getName(),donDrapper);
16+
//madMen.put(donDrapper.getName(),peggyOlson);//override the value in the key
17+
madMen.put(peggyOlson.getName(),peggyOlson);
18+
madMen.put(bertCooper.getName(),bertCooper);
19+
20+
System.out.println(madMen);
21+
22+
for (String name:madMen.keySet()) {
23+
System.out.println(name);
24+
}
25+
26+
for (Person person:madMen.values()) {
27+
System.out.println(person);
28+
}
29+
30+
for (Map.Entry<String,Person> entry:
31+
madMen.entrySet()) {
32+
//System.out.println(entry);
33+
System.out.println(entry.getKey());
34+
System.out.println(entry.getValue());
35+
}
36+
}
37+
}

0 commit comments

Comments
 (0)