Skip to content

Commit 0194f40

Browse files
Chapter 17 collections btp170722
1 parent 1e45cfa commit 0194f40

34 files changed

Lines changed: 1481 additions & 6 deletions

src/btp/oneP/AssociativeArray.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package btp.oneP;
2+
3+
public class AssociativeArray<K,V>{
4+
5+
public static void main(String[] args) {
6+
AssociativeArray<String,String> map = new AssociativeArray<String,String>(6);
7+
map.put("sky", "blue");
8+
map.put("grass", "green");
9+
map.put("ocean", "dancing");
10+
map.put("tree", "tall");
11+
map.put("earth", "brown");
12+
map.put("sun", "warm");
13+
try{
14+
map.put("extra", "object");
15+
}catch(Exception e){
16+
System.out.println(e);
17+
}
18+
System.out.println(map);
19+
System.out.println(map.get("ocean"));
20+
}
21+
22+
private Object[][] pair;
23+
private int index;
24+
public AssociativeArray(int length){
25+
pair = new Object[length][2];
26+
}
27+
28+
public void put(K key,V value){
29+
if(index >= pair.length){
30+
throw new ArrayIndexOutOfBoundsException();
31+
}
32+
pair[index++] = new Object[]{key,value};
33+
}
34+
35+
@SuppressWarnings("unchecked")
36+
public V get(K key){
37+
for(int i=0;i<pair.length;i++){
38+
if(key.equals(pair[i][0])){
39+
return (V)pair[i][1];
40+
}
41+
}
42+
return null;
43+
}
44+
45+
public String toString(){
46+
StringBuilder sb = new StringBuilder();
47+
for(int i=0;i<index;i++){
48+
sb.append(pair[i][0].toString());
49+
sb.append(" : ");
50+
sb.append(pair[i][1].toString());
51+
if(i<index-1){
52+
sb.append("\n");
53+
}
54+
}
55+
return sb.toString();
56+
}
57+
}

src/btp/oneP/Bits.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package btp.oneP;
2+
3+
import java.util.BitSet;
4+
import java.util.Random;
5+
6+
public class Bits {
7+
public static void printBitSet(BitSet b){
8+
System.out.println("bits: "+b);
9+
StringBuilder bbits = new StringBuilder();
10+
for(int j = 0;j < b.size();j++){
11+
bbits.append(b.get(j)?"1":"0");
12+
}
13+
System.out.println("bit pattern: "+bbits);
14+
}
15+
public static void main(String[] args) {
16+
// TODO Auto-generated method stub
17+
Random rand = new Random(47);
18+
byte bt = (byte)rand.nextInt();
19+
BitSet bb = new BitSet();
20+
for(int i = 7;i>=0;i--){
21+
if(((1 << i)&bt) != 0){
22+
bb.set(i);
23+
}else{
24+
bb.clear(i);
25+
}
26+
}
27+
System.out.println("byte value: "+bt);
28+
printBitSet(bb);
29+
30+
short st = (short)rand.nextInt();
31+
BitSet bs = new BitSet();
32+
for(int i = 15;i>=0;i--){
33+
if(((1 << i)&st) != 0){
34+
bs.set(i);
35+
}else{
36+
bs.clear(i);
37+
}
38+
}
39+
System.out.println("short value: "+st);
40+
printBitSet(bs);
41+
42+
int it = rand.nextInt();
43+
BitSet bi = new BitSet();
44+
for(int i = 31;i>=0;i--){
45+
if(((1 << i)&bt) != 0){
46+
bi.set(i);
47+
}else{
48+
bi.clear(i);
49+
}
50+
}
51+
System.out.println("int value: "+it);
52+
printBitSet(bi);
53+
54+
BitSet b127 = new BitSet();
55+
b127.set(127);
56+
System.out.println("set bit 127: "+b127);
57+
BitSet b255 = new BitSet(65);
58+
b255.set(255);
59+
System.out.println("set bit 255: "+b255);
60+
61+
BitSet b1023 = new BitSet(512);
62+
b1023.set(1023);
63+
b1023.set(1024);
64+
System.out.println("set bit 1023: "+b1023);
65+
}
66+
67+
}

src/btp/oneP/CanonicalMapping.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package btp.oneP;
2+
3+
import java.util.WeakHashMap;
4+
5+
public class CanonicalMapping {
6+
7+
public static void main(String[] args) {
8+
int size = 1000;
9+
if(args.length > 0){
10+
size = new Integer(args[0]);
11+
}
12+
13+
Key[] keys = new Key[size];
14+
WeakHashMap<Key,Value> map = new WeakHashMap<Key,Value>();
15+
for(int i = 0;i < size; i++){
16+
Key k = new Key(Integer.toString(i));
17+
Value v = new Value(Integer.toString(i));
18+
if(i % 3 == 0){
19+
keys[i] = k;
20+
}
21+
map.put(k, v);
22+
}
23+
System.gc();
24+
}
25+
26+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package btp.oneP;
2+
3+
import java.util.ArrayList;
4+
import java.util.Iterator;
5+
import java.util.List;
6+
7+
public class ChangeCollectionTest {
8+
9+
public static void main(String[] args) {
10+
List<String> list = new ArrayList<String>();
11+
list.add("hh");
12+
Iterator<String> it = list.iterator();
13+
//list.add("hh");
14+
while(it.hasNext()){
15+
it.remove();
16+
}
17+
}
18+
19+
}

src/btp/oneP/CountedString.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package btp.oneP;
2+
3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
8+
public class CountedString {
9+
10+
private static List<String> created = new ArrayList<String>();
11+
private String s;
12+
private int id = 0;
13+
public CountedString(String str){
14+
s = str;
15+
created.add(s);
16+
for(String s2:created){
17+
if(s2.equals(s)){
18+
id++;
19+
}
20+
}
21+
}
22+
23+
public int hashCode(){
24+
int result = 17;
25+
result = 37*result+s.hashCode();
26+
result = 37*result+id;
27+
return result;
28+
}
29+
30+
public boolean equals(Object o){
31+
return o instanceof CountedString && s.equals(((CountedString)o).s) && id==((CountedString)o).id;
32+
}
33+
34+
@Override
35+
public String toString() {
36+
return "CountedString [s=" + s + ", id=" + id + "hashCode():"+hashCode()+"]";
37+
}
38+
39+
public static void main(String[] args) {
40+
Map<CountedString,Integer> map = new HashMap<CountedString,Integer>();
41+
CountedString[] cs = new CountedString[5];
42+
for(int i=0;i<cs.length;i++){
43+
cs[i] = new CountedString("hi");
44+
map.put(cs[i], i);
45+
}
46+
System.out.println(map);
47+
for(CountedString cString:cs){
48+
System.out.print("Looking up "+cString);
49+
System.out.println(map.get(cString));
50+
}
51+
}
52+
53+
}

src/btp/oneP/DequeTest.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package btp.oneP;
2+
3+
import java.util.LinkedList;
4+
5+
public class DequeTest {
6+
static void fillTest(Deque<Integer> deque){
7+
for(int i = 20;i < 27;i++){
8+
deque.addFirst(i);
9+
}
10+
for(int i = 50;i < 55;i++){
11+
deque.addLast(i);
12+
}
13+
}
14+
public static void main(String[] args) {
15+
Deque<Integer> di = new Deque<Integer>();
16+
fillTest(di);
17+
System.out.println(di);
18+
19+
while(di.size() != 0){
20+
System.out.print(di.removeFirst()+" ");
21+
}
22+
System.out.println();
23+
24+
fillTest(di);
25+
while(di.size() != 0){
26+
System.out.print(di.removeLast()+" ");
27+
}
28+
System.out.println();
29+
}
30+
31+
}
32+
33+
34+
class Deque<T>{
35+
private LinkedList<T> deque = new LinkedList<T>();
36+
public void addFirst(T t){
37+
deque.add(t);
38+
}
39+
public void addLast(T t){
40+
deque.addLast(t);
41+
}
42+
public T getFirst(){
43+
return deque.getFirst();
44+
}
45+
public T getLast(){
46+
return deque.getLast();
47+
}
48+
public T removeFirst(){
49+
return deque.removeFirst();
50+
}
51+
public T removeLast(){
52+
return deque.removeLast();
53+
}
54+
public int size(){
55+
return deque.size();
56+
}
57+
public String toString(){
58+
return deque.toString();
59+
}
60+
}

src/btp/oneP/Element.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package btp.oneP;
2+
3+
public class Element {
4+
private String ident;
5+
public Element(String id){
6+
ident = id;
7+
}
8+
public String toString(){
9+
return ident;
10+
}
11+
public int hashCode(){
12+
return ident.hashCode();
13+
}
14+
public boolean equals(Object r){
15+
return r instanceof Element && ident.equals(((Element)r).ident);
16+
}
17+
protected void finalize(){
18+
System.out.println("Finalizing "+this.getClass().getSimpleName()+" "+ident+":"+(Integer.parseInt(ident)%3==0));
19+
}
20+
}

src/btp/oneP/Enumerations.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package btp.oneP;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.Enumeration;
6+
import java.util.Vector;
7+
8+
public class Enumerations {
9+
10+
public static void main(String[] args) {
11+
Vector<String> v = new Vector<String>(Countries.names(10));
12+
Enumeration<String> e = v.elements();
13+
while(e.hasMoreElements()){
14+
System.out.println(e.nextElement()+", ");
15+
}
16+
e = Collections.enumeration(new ArrayList<String>());
17+
18+
}
19+
20+
}

src/btp/oneP/FailFast.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package btp.oneP;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collection;
5+
import java.util.ConcurrentModificationException;
6+
import java.util.Iterator;
7+
8+
public class FailFast {
9+
10+
public static void main(String[] args) {
11+
Collection<String> c = new ArrayList<String>();
12+
Iterator<String> it = c.iterator();
13+
c.add("An object");
14+
try{
15+
String s = it.next();
16+
}catch(ConcurrentModificationException e){
17+
System.out.println(e);
18+
}
19+
}
20+
21+
}

0 commit comments

Comments
 (0)