復習_01_コンテナの適用

5794 ワード

一. 仕事中にjavaが少なくなって、知識点が忘れてしまいました.この2、3日面接が抜けてしまったのは悲しいですね.幸いなことに、考え方はまだはっきりしていて、知識点を蓄積して、簡単な応用を加えるだけで、OKになるはずです.あまり話さないで、本題に入りましょう.
        
二. 容器のこの章はまだ印象が深いはずです.これは多く使われているので、知識の完全性のために復習しています.
容器分類:秩序ある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);
	}
}
 
三. このプログラムは本当に基礎的で基礎的ではありませんが、これも容器の中で最もよく使われる部分です.さらに深く入ると、容器の底層が実現され、容器の同期とロックが行われます.時間があればまた改善します.