JAvaの集合フレームワーク:set,listとmap


集合フレームワークは,集合を表すために規定された統一的な標準的なアーキテクチャである.任意の集合フレームワークは、対外インタフェース、インタフェースの実装、および集合演算のアルゴリズムの3つの大きなブロックを含む.今日は主に3つの集合フレームワーク構造,すなわちArrayList,HashSet,HashMapを学習した.
  1.Listインタフェース(ArrayList)
Listは相対的に秩序化された集合を提供し,集合の長さを自分で変えることができ,要素の繰返しを可能にする
ArrayListの特徴:線形、秩序、長さが可変で、下付きがあります.
以下にArrayListの実装と遍歴を示す
 
public static void main(String args[]) {

		//     ArrayList  
		java.util.ArrayList<String> list = new java.util.ArrayList<String>();

		//   10   
		for (int i = 0; i < 10; i++) {
			String s = "  " + i;
			list.add(s);
		}

		//       :        
		for (int i = 0; i < list.size(); i++) {
			//            
			String str = list.get(i);
			System.out.print(str + "\t");
		}

		System.out.println();

		//       :     
		java.util.Iterator<String> iter = list.iterator();
		//        
		while (iter.hasNext()) {
			//       
			String str = iter.next();
			System.out.print(str + "\t");
		}

		System.out.println();

		//       :  for   
		for (String str : list) {
			System.out.print(str + "\t");
		}
	}

2.Setインタフェース(HashSet)
Setインタフェースは無秩序な集合を提供し、彼のオブジェクトは特定の方法でソートされず、単純にオブジェクトを集合に追加するだけなので、重複オブジェクトの出現は許されない.
HashSet特徴:無秩序、長さ可変、繰り返し不可
以下はHashSetの実現と遍歴である
 
public static void main(String[] args) {
		//     HashSet    
		java.util.HashSet<String> sets = new java.util.HashSet<String>();  
		  
		//   10     
		for (int i = 0; i < 10; i++) {  
		    String s = "  " + i;  
		    sets.add(s);  
		}  
		  
		//       ,           ,  add()                     
		boolean b = sets.add("  2"); 
		boolean b1 = sets.add("  10");
		System.out.println(b + "<>" + b1);  
		//      :       
		java.util.Iterator<String> iter = sets.iterator();  
		while (iter.hasNext()) {  
		    String str = iter.next();  
		    System.out.print(str + "\t");  
		}  
		  
		System.out.println();  
		  
		//       :  for  
		for(String str:sets){  	      
		    System.out.print(str+"\t");  
		}  

	}

3.Mapインタフェース(HashMap)
Mapはマッピングされた対応関係の集合を提供し、key値が重複できないペアのキー値ペアで構成され、valueは可能である.また、同じキーが入力されている場合は置換されます
HashMapの特徴:無秩序、key繰り返し不可
以下にHashMapの実装と遍歴を示す
 
//     HashMap    
		java.util.HashMap<Integer, String> maps = new java.util.HashMap<Integer, String>();  
		  
		//          
		for (int i = 0; i < 10; i++) {  
		    int num = i;  
		    String name = "  " + i;    
		    maps.put(num, name);  	  
		}  
		  
		//       ,  K      ,              
		maps.put(10, "  5");  
		maps.put(4, "   ");     
		    
		//     :    
		//  K Set    
		java.util.Set<Integer> set = maps.keySet();  
		//  K   ,  set      
		java.util.Iterator<Integer> iter = set.iterator();  
		while(iter.hasNext()){  
		    //    key  
		    int num = iter.next();  
		    //  key     Value  
		    String name = maps.get(num);     
		    System.out.println(num+"\t"+name);  
		}  
	}

以下は,集合フレームワーク構造で解決した小さな問題について,それぞれ並べ替えと統計的繰返し回数である.
1並べ替えを繰り返すクラス
public class uniqueorder {

	int i = 0;
	int[] orderarray = new int[i];
	
	//           
	public void add(int a){
		int[] addarray = new int[i+1];
		for(int j=0;j<i;j++){
			addarray[j]=orderarray[j];
		}
		addarray[i] = a;
		orderarray = addarray;
		i++;
	}
	//            ,          
	public int operate(){
		int j=0;
		//  set  (    )
		java.util.HashSet<Integer> hset = new java.util.HashSet<Integer>();
		for(int a=0;a<i;a++){
			hset.add(orderarray[a]);
		}
		//         (          orderarray)
		java.util.Iterator<Integer> iter = hset.iterator();
		while(iter.hasNext()){
			int k = iter.next();
			int[] iterarray = new int[j+1];
			for(int a=0;a<j;a++){
				iterarray[a]=orderarray[a];
			}
			iterarray[j] = k;
			orderarray =iterarray;
			j++;
		}
		//    (   )
		for(int a=0;a<j;a++){
			for(int b=j-1;b>a;b--){
				if(orderarray[b]<orderarray[b-1]){
					int temp=orderarray[b-1];
					orderarray[b-1]=orderarray[b];
					orderarray[b]=temp;
				}
			}
		}
		return j;
	}
	
	//                 (          )
	public int pop(int index){
		
		int v=orderarray[index];
		return v;
	}
	
}

2統計重複文字数のクラス
public class countrepeat {

	int i = 0;
	int[] orderarray = new int[i]; 
	
	//           
	public void add(int a){
		int[] addarray = new int[i+1];
		for(int j=0;j<i;j++){
			addarray[j]=orderarray[j];
		}
		addarray[i] = a;
		orderarray = addarray;
		i++;
	}
	
	//                 
	public void operate(){

		//  hashmap  
		java.util.HashMap<Integer, Integer> hmap = new java.util.HashMap<Integer, Integer>();
		//  set  (    )
		java.util.HashSet<Integer> hset = new java.util.HashSet<Integer>();
		for(int a=0;a<i;a++){
			hset.add(orderarray[a]);
			if(!hmap.containsKey(orderarray[a])){
				hmap.put(orderarray[a], 1);
			}else if(hmap.containsKey(orderarray[a])){
				int v=hmap.get(orderarray[a])+1;
				hmap.put(orderarray[a], v);
			}
		}
		//         
		java.util.Iterator<Integer> iter = hset.iterator();
		while(iter.hasNext()){
			int k = iter.next();
			int v = hmap.get(k);
			System.out.println(k+"\t"+v);
		}
	}
	
}

3テストクラス
public static void main(String[] args) {
		//      
		int[] testarray = {2,34,5,25,1,34,5,76,37,9};
		
		//    
		uniqueorder uo = new uniqueorder();
		countrepeat cr = new countrepeat();
		//     
		for(int i=0;i<10;i++){
			uo.add(testarray[i]);
			cr.add(testarray[i]);
		}
		int k=uo.operate();
		for(int i=0;i<k;i++){
			System.out.print(uo.pop(i)+"\t");
		}
		System.out.println();
		System.out.println("-----------------------");
		cr.operate();
	}

答えは
1 2 5 9 25 34 37 7
-----------------------
34 2
1 1
2 1
5 2
37 1
76 1
25 1
9 1