Java共通コンテナーの使用
一般的に使用されるコンテナは
おそらく
-リストのサブクラス
ArraryList和LinkedList
-マップのサブクラス
HashMap、TreeMap、LinkedHashMapおよびConcurrentHashMap(同時セキュリティ)
-セットのサブクラス
HashSet、TreeSet
-キューとサブクラス(同時実行性を除く他の場所ではあまり使用されません)
これらのコンテナが広く使用されている理由を非常に多く述べてきましたが、最初のポイントはデータ構造理由。
データ構造の観点から見ると、
ArrayListは線形に似たテーブル(一般化)であり、LinkedListはリンクリストです。
マップはキーと値のペアです。
セットは、繰り返し要素のない順序なしのコレクションです。
キュー
では、なぜスタックがないのですか?
答えは、スタックがあるということです。初期のバージョンでは、ベクターベースのスタックがあります。これを知っていれば、
作成者はベクターベースのスタックを直接継承していることがわかります。スタックでは、配列に対して頻繁に挿入と削除の操作が行われることは間違いありません。これは災害であり、データ構造自体と一致しない介入方法が含まれています。
だから推奨されません スタックとベクター
スタックの場合、LinedListはスタックのすべてのニーズを完全に満たすことができます。LinkedListは、Queueを完全に置き換えることもできます。
写真を盗むことはまだ非常に明確です
コンテナ印刷
コンテナの印刷では、デフォルトでtoString()メソッドが呼び出されます。必要に応じて書き換えることができますが、直接書き換えることはお勧めしません。書き換えにはアダプタモードを使用してください。
とてもシンプル
public class Test {
public static void main(String[] args){
Random random = new Random(11);
List<Integer> list = new ArrayList<>();
Map<Integer,Integer> map = new TreeMap<>();
Set<Integer> set = new LinkedHashSet<>();
for(int i=0;i<5;i++){
list.add(random.nextInt(10));
map.put(i,random.nextInt(10));
set.add(random.nextInt(10));
}
System.out.println(list.toString());
System.out.println(map);
System.out.println(set);
}
}
結果:
[8, 5, 0, 7, 7]
{0=8, 1=3, 2=3, 3=4, 4=9}
[1, 7, 3, 4, 2]
コンテナを追加および削除する
コレクションインターフェース下のクラスの場合
boolean add(E e);
boolean remove(Object o);
boolean addAll(Collection<? extends E> c);
boolean removeAll(Collection<?> c);
地図
void putAll(Map<? extends K, ? extends V> m);
void clear();
V put(K key, V value);
default boolean remove(Object key, Object value) ;
コンテナーの反復または走査
1.イテレータートラバーサル
コレクションの場合、コンテナはiterator()メソッドを呼び出すだけです。イテレータオブジェクトを取得するだけです。
Mapオブジェクトの場合、entryオブジェクトのみに反復子メソッドがあります
public static void main(String[] args){
Random random = new Random(11);
List<Integer> list = new ArrayList<>();
Map<Integer,Integer> map = new TreeMap<>();
Set<Integer> set = new LinkedHashSet<>();
for(int i = 0;i < 5;i++){
list.add(random.nextInt(10));
map.put(i,random.nextInt(10));
set.add(random.nextInt(10));
}
// 获取迭代器对象
Iterator<Integer> iterator1 = list.iterator();
Iterator<Integer> iterator2 = set.iterator();
Iterator<Map.Entry<Integer,Integer>> iterator3= map.entrySet().iterator();
while (iterator1.hasNext()){
System.out.print(iterator1.next()+" ");
}
System.out.println();
while (iterator2.hasNext()){
System.out.print(iterator2.next()+" ");
}
System.out.println();
while (iterator3.hasNext()){
Map.Entry entry = iterator3.next();
System.out.print(entry.getKey()+":"+entry.getValue()+" ");
}
System.out.println();
}
8 5 0 7 7
1 7 3 4 2
0:8 1:3 2:3 3:4 4:9
2. Iterableインターフェースは、それぞれに対してトラバースできます。
public static void main(String[] args){
Random random = new Random(11);
List<Integer> list = new ArrayList<>();
Map<Integer,Integer> map = new TreeMap<>();
Set<Integer> set = new LinkedHashSet<>();
for(int i=0;i<5;i++){
list.add(random.nextInt(10));
map.put(i,random.nextInt(10));
set.add(random.nextInt(10));
}
for(Integer num: list){
System.out.print(num+" ");
}
System.out.println();
for(Integer num: set){
System.out.print(num+" ");
}
System.out.println();
for(Map.Entry entry :map.entrySet()){
System.out.print(entry.getKey()+":"+entry.getValue()+" ");
}
System.out.println();
}
8 5 0 7 7
1 7 3 4 2
0:8 1:3 2:3 3:4 4:9