Skip to content

Commit cdaa8e0

Browse files
Chapter 17 collections btp170710
1 parent 233b2a0 commit cdaa8e0

10 files changed

Lines changed: 703 additions & 2 deletions

Study.iml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module type="JAVA_MODULE" version="4">
3+
<component name="NewModuleRootManager" inherit-compiler-output="true">
4+
<exclude-output />
5+
<content url="file://$MODULE_DIR$">
6+
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
7+
</content>
8+
<orderEntry type="inheritedJdk" />
9+
<orderEntry type="sourceFolder" forTests="false" />
10+
<orderEntry type="library" name="lib1" level="project" />
11+
</component>
12+
</module>

src/btp/oneP/ABtpTest.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import java.io.PrintStream;
44
import java.util.ArrayList;
55
import java.util.Arrays;
6+
import java.util.LinkedList;
7+
import java.util.List;
68
import java.util.Scanner;
79

810
public class ABtpTest {
@@ -11,13 +13,17 @@ public static void main(String[] args) {
1113
PrintStream p = System.out;
1214
Scanner sc =new Scanner(System.in);
1315
try{
14-
ArrayList as = returnArray();
16+
/*ArrayList as = returnArray();
1517
ArrayList<String> ass = (ArrayList<String>)as;
1618
p.println(ass);
1719
as = returnArrayNew();
1820
p.println(as);
1921
ass = (ArrayList<String>)as;
20-
p.println(ass);
22+
p.println(ass);*/
23+
24+
List myIntList = new LinkedList();//1
25+
myIntList.add(new Integer(0));//2
26+
Integer x = (Integer) myIntList.iterator().next();//3
2127
}catch(Exception e){
2228
e.printStackTrace();
2329
}finally{

src/btp/oneP/CollectionMethod.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.Arrays;
5+
import java.util.Collection;
6+
import java.util.Collections;
7+
import java.util.List;
8+
9+
public class CollectionMethod {
10+
11+
public static void main(String[] args) {
12+
Collection<String> c = new ArrayList<String>();
13+
c.addAll(Countries.names(6));
14+
c.add("ten");
15+
c.add("eleven");
16+
System.out.println(c);
17+
18+
Object[] array = c.toArray();
19+
String[] str = c.toArray(new String[0]);
20+
21+
System.out.println(Arrays.toString(array));
22+
System.out.println(Arrays.toString(str));
23+
24+
System.out.println("Collections.max(c) = "+Collections.max(c));
25+
System.out.println("Collections.min(c) = "+Collections.min(c));
26+
27+
Collection<String> c2 = new ArrayList<String>();
28+
c2.addAll(Countries.names(6));
29+
c.addAll(c2);
30+
System.out.println(c);
31+
c.remove(Countries.DATA[0][0]);
32+
System.out.println(c);
33+
c.removeAll(c2);
34+
System.out.println(c);
35+
c.addAll(c2);
36+
System.out.println(c);
37+
String val = Countries.DATA[3][0];
38+
System.out.println("c.contains("+val+")="+c.contains(val));
39+
System.out.println("c.containsAll(c2)="+c.containsAll(c2));
40+
41+
Collection<String> c3 = ((List<String>)c).subList(3, 5);
42+
c2.retainAll(c3);
43+
System.out.println(c2);
44+
c2.removeAll(c3);
45+
System.out.println("c2.isEmpty()="+c2.isEmpty());
46+
c = new ArrayList<String>();
47+
c.addAll(Countries.names(6));
48+
System.out.println(c);
49+
c.clear();
50+
System.out.println("after c.clear():"+c);
51+
}
52+
53+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package btp.oneP;
2+
3+
import java.util.AbstractList;
4+
5+
public class CountingIntegerList extends AbstractList<Integer>{
6+
7+
public static void main(String[] args) {
8+
// TODO Auto-generated method stub
9+
//构造函数构造对象时里面还没有值,都是null,在调用toString函数的时候,
10+
//toString函数内使用Iterator遍历集合,next()时调用了get(index)
11+
//所以是边赋值边打印
12+
System.out.println(new CountingIntegerList(30));
13+
}
14+
15+
16+
private int size;
17+
public CountingIntegerList(int size){
18+
this.size = size<0?0:size;
19+
}
20+
21+
@Override
22+
public Integer get(int index) {
23+
// TODO Auto-generated method stub
24+
return Integer.valueOf(index);
25+
}
26+
27+
@Override
28+
public int size() {
29+
// TODO Auto-generated method stub
30+
return size;
31+
}
32+
33+
}

src/btp/oneP/CountingMapData.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package btp.oneP;
2+
3+
import java.util.AbstractMap;
4+
import java.util.LinkedHashSet;
5+
import java.util.Map;
6+
import java.util.Set;
7+
8+
public class CountingMapData extends AbstractMap<Integer,String>{
9+
10+
public static void main(String...args){
11+
System.out.println(new CountingMapData(60));
12+
}
13+
14+
private int size;
15+
private static String[] chars = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z".split(" ");
16+
public CountingMapData(int size){
17+
this.size = size<0?0:size;
18+
}
19+
20+
private static class Entry implements Map.Entry<Integer, String>{
21+
int index;
22+
Entry(int index){
23+
this.index = index;
24+
}
25+
public boolean equals(Object o){
26+
return Integer.valueOf(index).equals(o);
27+
}
28+
@Override
29+
public Integer getKey() {
30+
// TODO Auto-generated method stub
31+
return index;
32+
}
33+
34+
@Override
35+
public String getValue() {
36+
// TODO Auto-generated method stub
37+
return chars[index%chars.length]+Integer.toString(index/chars.length);
38+
}
39+
40+
@Override
41+
public String setValue(String value) {
42+
// TODO Auto-generated method stub
43+
return null;
44+
}
45+
46+
public int hashCode(){
47+
return Integer.valueOf(index).hashCode();
48+
}
49+
}
50+
51+
@Override
52+
public Set<java.util.Map.Entry<Integer, String>> entrySet() {
53+
// TODO Auto-generated method stub
54+
Set<Map.Entry<Integer, String>> entries = new LinkedHashSet<Map.Entry<Integer,String>>();
55+
for(int i=0;i<size;i++){
56+
entries.add(new Entry(i));
57+
}
58+
return entries;
59+
}
60+
61+
}

src/btp/oneP/Countries.java

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
package btp.oneP;
2+
3+
import java.util.AbstractMap;
4+
import java.util.AbstractSet;
5+
import java.util.ArrayList;
6+
import java.util.HashMap;
7+
import java.util.HashSet;
8+
import java.util.Hashtable;
9+
import java.util.Iterator;
10+
import java.util.LinkedHashMap;
11+
import java.util.LinkedHashSet;
12+
import java.util.LinkedList;
13+
import java.util.List;
14+
import java.util.Map;
15+
import java.util.Set;
16+
import java.util.TreeMap;
17+
import java.util.TreeSet;
18+
19+
public class Countries {
20+
21+
public static void main(String[] args) {
22+
System.out.println(capitals(10));
23+
System.out.println(names(10));
24+
System.out.println(new HashMap<String,String>(capitals(3)));
25+
System.out.println(new LinkedHashMap<String,String>(capitals(3)));
26+
System.out.println(new TreeMap<String,String>(capitals(3)));
27+
System.out.println(new Hashtable<String,String>(capitals(3)));
28+
System.out.println(new HashSet<String>(names(6)));
29+
System.out.println(new LinkedHashSet<String>(names(6)));
30+
System.out.println(new TreeSet<String>(names(6)));
31+
System.out.println(new ArrayList<String>(names(6)));
32+
System.out.println(new LinkedList<String>(names(6)));
33+
System.out.println(capitals().get("ALGERIA"));
34+
}
35+
36+
public static final String[][] DATA = {
37+
{"ALGERIA","Algiers"},{"CHINA","Beijing"},
38+
{"Japan","Tokoy"},{"America","Washington"}
39+
};
40+
private static class FlyweightMap extends AbstractMap<String,String>{
41+
private static class Entry implements Map.Entry<String, String>{
42+
int index;
43+
Entry(int index){
44+
this.index = index;
45+
}
46+
public boolean equals(Object o){
47+
return DATA[index][0].equals(o);
48+
}
49+
@Override
50+
public String getKey() {
51+
// TODO Auto-generated method stub
52+
return DATA[index][0];
53+
}
54+
55+
@Override
56+
public String getValue() {
57+
return DATA[index][1];
58+
}
59+
60+
@Override
61+
public String setValue(String value) {
62+
// TODO Auto-generated method stub
63+
return null;
64+
}
65+
66+
public int hashCode(){
67+
return DATA[index][0].hashCode();
68+
}
69+
}
70+
71+
static class EntrySet extends AbstractSet<Map.Entry<String, String>>{
72+
private int size;
73+
EntrySet(int size){
74+
if(size < 0){
75+
this.size = 0;
76+
}else if(size > DATA.length){
77+
this.size = DATA.length;
78+
}else{
79+
this.size = size;
80+
}
81+
}
82+
public int size(){
83+
return size;
84+
}
85+
86+
@Override
87+
public Iterator<java.util.Map.Entry<String, String>> iterator() {
88+
// TODO Auto-generated method stub
89+
return new Iter();
90+
}
91+
92+
private class Iter implements Iterator<Map.Entry<String, String>>{
93+
private Entry entry = new Entry(-1);
94+
@Override
95+
public boolean hasNext() {
96+
// TODO Auto-generated method stub
97+
return entry.index < size - 1;
98+
}
99+
100+
@Override
101+
public java.util.Map.Entry<String, String> next() {
102+
entry.index++;
103+
return entry;
104+
}
105+
106+
}
107+
}
108+
109+
private static Set<Map.Entry<String, String>> entries = new EntrySet(DATA.length);
110+
@Override
111+
public Set<java.util.Map.Entry<String, String>> entrySet() {
112+
return entries;
113+
}
114+
115+
}
116+
117+
118+
119+
120+
121+
122+
static Map<String,String> select(final int size){
123+
return new FlyweightMap(){
124+
public Set<Map.Entry<String, String>> entrySet(){
125+
return new EntrySet(size);
126+
}
127+
};
128+
}
129+
130+
static Map<String,String> map = new FlyweightMap();
131+
public static Map<String,String> capitals(){
132+
return map;
133+
}
134+
public static Map<String,String> capitals(int size){
135+
return select(size);
136+
}
137+
static List<String> names = new ArrayList<String>(map.keySet());
138+
139+
public static List<String> names(){
140+
return names;
141+
}
142+
public static List<String> names(int size){
143+
return new ArrayList<String>(select(size).keySet());
144+
}
145+
}

0 commit comments

Comments
 (0)