Java中集合(一)Collection、List、ArrayList

6626 ワード

一、概説
  • 本質的には、データサイズの不定のセットを格納するコンテナであるトップレベルインタフェースCollection
  • 二、集合の声明
  • 集合の宣言Collection c;Stringタイプのデータを格納するセットを表します.
  • :汎用型で、特定のタイプの代わりに1つのセットを宣言するときに汎用型を一時的に使用します.汎用型の制限のため、セットにはオブジェクトのみが格納されます.

  • 三、Collectionの方法:
  • add():要素を追加します.
  • remove():要素を削除します.削除する前に、まず要素が存在するかどうかを判断し、存在する場合は削除します.存在しない場合はスキップします.
  • contains():指定した要素がセットに含まれているかどうかを判断します.
  • clear() ; クリアセット
  • isEmpty():集合が空かどうかを判断します.
  • size():コレクション内の要素の個数を取得します.
  • toArray():集合を配列に変換し、戻り値はObject[]です.返されるObject[]は、他のタイプの配列に変換できません.理由:集合下位層は実際にはObjectでコンテンツ
  • を格納する.
  • toArray(new String[]):コレクションを指定したタイプの配列に変換します.下位レベルでは、配列のサイズが要素の個数に等しいかどうかを判断します.要素の数より大きい場合は、パラメータ配列を直接使用して要素を格納します.要素の個数より小さい場合、下位レベルでは、配列タイプに基づいて要素の個数などの大きな配列格納データのみが作成されます.
    	public static void main(String[] args) {
    
    		//        String  
    		Collection c = new ArrayList();
    
    		//     
    		c.add("adf");
    		c.add("rth");
    		c.add("lmn");
    		c.add("jkl");
    
    		//       Object     
    		// Object[] os = c.toArray();
    		//                  Object    
    		// Oject[] os = new Object[c.size()];
    		// String[] os = (String[]) c.toArray();
    		// for (String object : os) {
    		// System.out.println(object);
    		// }
    		
    		//              
    		/*
    		 *                          
    		 *            ,               ,         。
    		 *         ,                           
    		 */
    		String[] ss = c.toArray(new String[0]);
    		for (String s : ss) {
    			System.out.println(s);
    		}
    
    		//       ---                   
    		// System.out.println(c.size());
    
    		//     
    		// c.clear();
    
    		//          
    		// System.out.println(c.isEmpty());
    
    		//     
    		// for (String s : c) {
    		// System.out.println(s);
    		// }
    
    		//     ---                      。
    		// c.remove("adg");
    
    		//            
    		// System.out.println(c.contains("jkl"));
    
    		//    toString    
    		System.out.println(c);
    
    	}
    

  • 四、List
  • ListはCollectionのサブインタフェースであるため、Collectionの方法はすべて使用可能である.
  • Listの要素は順序付けされており、Listに存在する要素は自動的に番号付けされます.0から始まります.
  • は、重複する要素
  • を有することができる.
    Listでの方法:
  • add():要素
  • を追加
  • add(int index,arg):指定した下付きの位置に指定した要素
  • を追加する.
  • equals(List):2つのリストの内容が一致しているか(順序を含む)を判断します.最下位実装:実際には、対応する位置の要素を順次呼び出すequalsメソッドが一致しているかどうかを比較します.
  • get(int index):指定した下付き位置の要素を取得します.
  • indexOf() ; 指定した要素がリストに最初に表示される場所を取得します.要素がリストにない場合は-1を返す.
  • lastIndexOf():指定した要素がリストに最後に表示された場所を取得します.
  • removeIndexOf():下付き位置に設定されている要素を除去します.
  • set(int index,arg):下付き位置を指定する要素を置き換えます.
  • subList():サブリストを取得します.
    	public static void main(String[] args) {
    
    		List list = new ArrayList();
    
    		//     
    		list.add("abc");
    		list.add("def");
    		list.add("ghi");
    		list.add("jkl");
    		list.add("abc");
    
    		// list.add(10, "xyz");
    
    		//             
    		// list.remove(2);
    
    		//           
    		// list.set(1, "opq");
    
    		//             
    		// System.out.println(list.get(3));
    
    		//                   
    		//        ,   -1
    		// System.out.println(list.indexOf("ad"));
    
    		//                 
    		// list.add(1, "mno");
    
    		//           
    		// List list2 = new ArrayList();
    		// list2.add(new String("abc"));
    		// list2.add("def");
    		// list2.add("ghi");
    		// list2.add("jkl");
    		// list2.add("abc");
    		//               ,                equals           。
    		// System.out.println(list.equals(list2));
    
    		System.out.println(list);
    
    	}

  • 五、ArrayList
  • はListの実装クラス
  • である.
  • は配列に基づく
  • である.
  • の初期容量は10である.容量が足りない場合は自動的に容量を拡大し、前回の半分を加算します. 10 -> 15 ->22 ....
  • メモリ容量連続.クエリーが速く、削除が遅い.

  • 練習:1.配列で簡易版のArrayListストレージStringを実現するには、addremovesetgetindexOfcontainsisEmptysizetoStringなどの方法があります.
    import java.util.Arrays;
    
    public class ListExer {
    
    	//     
    	private String[] data;
    
    	//            
    	private int size = 0;
    
    	public ListExer() {
    		data = new String[10];
    	}
    
    	public ListExer(int capacity) {
    		//             
    		if (capacity < 0) {
    			capacity = 10;
    		}
    		data = new String[capacity];
    	}
    
    	private void grow() {
    
    		if (data.length <= 1) {
    			data = Arrays.copyOf(data, data.length + 1);
    			return;
    		}
    
    		data = Arrays.copyOf(data, data.length + (data.length >> 1));
    
    	}
    
    	public void add(String s) {
    
    		//         
    		if (size >= data.length) {
    			this.grow();
    		}
    
    		data[size] = s;
    
    		size++;
    
    	}
    
    	public void add(int index, String s) {
    
    		//         
    		if (index > size) {
    			throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
    		}
    
    		//         
    		if (size >= data.length) {
    			this.grow();
    		}
    
    		//     
    		// for (int i = size - 1; i >= index; i--) {
    		// data[i + 1] = data[i];
    		// }
    		System.arraycopy(data, index, data, index + 1, size - index);
    
    		data[index] = s;
    
    		size++;
    	}
    
    	public void remove(String s) {
    
    		//               
    		int index = this.indexOf(s);
    
    		//           
    		if (index != -1) {
    			this.remove(index);
    		}
    
    	}
    
    	private void out(int index) {
    		//       
    		if (index >= size) {
    			throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
    		}
    	}
    
    	public void remove(int index) {
    
    		this.out(index);
    
    		// for (int i = index; i < size - 1; i++) {
    		// data[i] = data[i + 1];
    		// }
    
    		System.arraycopy(data, index + 1, data, index, size - index - 1);
    
    		size--;
    	}
    
    	public void set(int index, String s) {
    
    		this.out(index);
    
    		data[index] = s;
    
    	}
    
    	public String get(int index) {
    
    		this.out(index);
    
    		return data[index];
    
    	}
    
    	public boolean contains(String s) {
    
    		return this.indexOf(s) != -1;
    
    	}
    
    	public boolean isEmpty() {
    
    		return size <= 0;
    
    	}
    
    	public int indexOf(String s) {
    
    		for (int i = 0; i < size; i++) {
    			if (s == data[i] || s != null && s.equals(data[i])) {
    				return i;
    			}
    		}
    
    		return -1;
    
    	}
    
    	public int size() {
    		return size;
    	}
    
    	public String toString() {
    
    		StringBuilder sb = new StringBuilder("[");
    
    		for (int i = 0; i < size; i++) {
    			sb.append(data[i]).append(", ");
    		}
    
    		String str = sb.toString();
    
    		if (str.length() > 1) {
    
    			str = str.substring(0, str.length() - 2);
    		}
    
    		return str += "]";
    
    	}
    	
    	public static void main(String[] args) {
    		
    		ListExer le = new ListExer(3);
    		
    		le.add("a");
    		le.add("b");
    		le.add("c");
    		
    		le.add(0,"e");
    		
    		le.remove(0);
    		
    		System.out.println(le);
    		
    	}
    
    }