復習_01_コンテナの適用
一. 仕事中にjavaが少なくなって、知識点が忘れてしまいました.この2、3日面接が抜けてしまったのは悲しいですね.幸いなことに、考え方はまだはっきりしていて、知識点を蓄積して、簡単な応用を加えるだけで、OKになるはずです.あまり話さないで、本題に入りましょう.
二. 容器のこの章はまだ印象が深いはずです.これは多く使われているので、知識の完全性のために復習しています.
容器分類:秩序あるList、無秩序なSet、キー値ペアのMapの3つのインタフェース;また、Iterator、Collectionsの2つのツールクラスがあります.
ListではArrayList(配列実装)とLinkedList(チェーンテーブル実装)がよく用いられ,SetではHashSet(ハッシュテーブル実装)とTreeSet(ツリー実装,秩序化),MapではHashMap(ハッシュテーブル実装)とTreeMap(ツリー実装,秩序化)がよく用いられる.
Iteratorは集合を巡る汎用インタフェースである.Collectionsは、コンテナを並べ替えて同期して変更できないコンテナを得るなど、コンテナを操作する方法を提供します.
次は、列のサブルーチンです.
三. このプログラムは本当に基礎的で基礎的ではありませんが、これも容器の中で最もよく使われる部分です.さらに深く入ると、容器の底層が実現され、容器の同期とロックが行われます.時間があればまた改善します.
二. 容器のこの章はまだ印象が深いはずです.これは多く使われているので、知識の完全性のために復習しています.
容器分類:秩序あるList、無秩序なSet、キー値ペアのMapの3つのインタフェース;また、Iterator、Collectionsの2つのツールクラスがあります.
ListではArrayList(配列実装)とLinkedList(チェーンテーブル実装)がよく用いられ,SetではHashSet(ハッシュテーブル実装)とTreeSet(ツリー実装,秩序化),MapではHashMap(ハッシュテーブル実装)とTreeMap(ツリー実装,秩序化)がよく用いられる.
Iteratorは集合を巡る汎用インタフェースである.Collectionsは、コンテナを並べ替えて同期して変更できないコンテナを得るなど、コンテナを操作する方法を提供します.
次は、列のサブルーチンです.
public class Student implements Comparable<Student>
{
private int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Student) {
Student tmp = (Student)obj;
return tmp.getId() == id && tmp.getName().equals(name);
} else {
return false;
}
}
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public String toString() {
return id + " " + name;
}
public int compareTo(Student s) {
if (id > s.getId()) {
return 1;
} else if (id == s.getId()) {
return 0;
} else {
return -1;
}
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class ListTest {
public static void main(String[] args) {
List<Student> a1 = new ArrayList<Student>();
a1.add(new Student(2, "name2"));
a1.add(new Student(1, "name1"));
a1.add(new Student(3, "name3"));
println("a1.contains:" + a1.contains(new Student(1,"name1")));
Collections.sort(a1);
for(int i=0; i<a1.size(); i++) {
println(a1.get(i));
}
println("Collections.binarySearch:" + Collections.binarySearch(a1, new Student(3,"name3")));
for(Iterator<Student> it=a1.iterator(); it.hasNext(); ) {
println(it.next());
it.remove();
}
println("a1.isEmpty: " + a1.isEmpty());
Queue<Student> que = new LinkedList<Student>();
que.offer(new Student(1,"S1"));
que.offer(new Student(2,"S2"));
que.offer(new Student(3,"S3"));
Student s = que.poll();
while (s != null) {
println(s);
s = que.poll();
}
println("a1.isEmpty: " + que.isEmpty());
}
public static void println(Object o) {
System.out.println(o);
}
}
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class SetTest {
public static void main(String[] args) {
//Set<Student> a1 = new HashSet<Student>();
Set<Student> a1 = new TreeSet<Student>();
a1.add(new Student(2, "name2"));
a1.add(new Student(1, "name1"));
a1.add(new Student(3, "name3"));
println("a1.contains:" + a1.contains(new Student(1,"name1")));
for(Student s : a1) {
println(s);
}
a1.add(new Student(4, "name4"));
for(Iterator<Student> it=a1.iterator(); it.hasNext(); ) {
println(it.next());
it.remove();
}
println("a1.isEmpty: " + a1.isEmpty());
}
public static void println(Object o) {
System.out.println(o);
}
}
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class MapTest {
public static void main(String[] args) {
Map<String,Student> a1 = new HashMap<String,Student>();
//Map<String,Student> a1 = new TreeMap<String,Student>();
a1.put("s3",new Student(3, "name3"));
a1.put("s2",new Student(2, "name2"));
a1.put("s0",new Student(0, "name0"));
a1.put("s1",new Student(1, "name1"));
println("a1.contains:" + a1.containsValue(new Student(1,"name1")));
for(String i : a1.keySet()) {
println(a1.get(i));
}
a1.put("s4",new Student(4, "name4"));
Set<Map.Entry<String, Student>> et=a1.entrySet();
for(Iterator<Map.Entry<String, Student>> it=et.iterator(); it.hasNext(); ) {
println(it.next().getValue());
it.remove();
}
println("et.isEmpty: " + et.isEmpty());
println("a1.isEmpty: " + a1.isEmpty());
}
public static void println(Object o) {
System.out.println(o);
}
}
三. このプログラムは本当に基礎的で基礎的ではありませんが、これも容器の中で最もよく使われる部分です.さらに深く入ると、容器の底層が実現され、容器の同期とロックが行われます.時間があればまた改善します.