地図
地図
形式: <K,V>、K キー、V 値; キーを値にマップし、重複キーを含めることはできません。各キーは 1 つの値にのみマップでき、重複キーが入力されると置き換えられます。
作成: ポリモーフィックな方法で。
具体的に:HashMap Map<String,Object> map = new HashMap<String,Object>();
ツリーマップ
要素のサイズを比較できる Map コレクションは、入力キーのサイズを並べ替えます。要素の自然な並べ替えを使用するか、コレクション内のカスタム比較コンテナーを使用して並べ替えることができます。
特徴:
重複キーは許可されていません。
キーと値の両方に null を挿入できます。
要素を並べ替えることができます。
順序付けされていないコレクション。挿入とトラバーサルの順序に一貫性がありません。
基本操作:
1、遍历元素
Set<Map.Entry<String,Integer>> entrySet = treeMap.entrySet();
2、获取所有key
Set<String> keySet = treeMap.keySet();
3、获取所有value
Collection<Integer> valueList = treeMap.values();
4、获取集合内第一个元素
String firstKey = treeMap.firstKey();
5、获取集合内最后一个元素
String lastKey =treeMap.lastKey();
並び替え:
自然な要素の並べ替え: put() メソッドが呼び出されると、入力要素が Comparable 型のオブジェクトに変換されるため、比較する要素は Comparable インターフェースを実装する必要があります。
TreeMap<Integer,String> treeMapFirst = new TreeMap<Integer, String>();
treeMapFirst.put(1,"huangqiuping");
treeMapFirst.put(6,"huangqiuping");
treeMapFirst.put(3,"huangqiuping");
System.out.println(treeMapFirst.toString());
结果:{1=huangqiuping, 3=huangqiuping, 6=huangqiuping}
カスタム コンパレータを使用して比較する: treeMap オブジェクトを作成するときは、カスタム コンパレータ オブジェクトを treeMap 構築メソッドに渡す必要があります; Comparator インターフェイスを実装し、比較メソッド compare(to1,to2) を実装する必要があります。
public class SortedTestComparator implements Comparator<SortedTest> {
//自定义比较器:实现compare(To1,To2)方法:
public int compare(SortedTest sortedTest1, SortedTest sortedTest2) {
int num = sortedTest1.getAge() - sortedTest2.getAge();
if(num==0){//为0时候,两者相同:
return 0;
}else if(num>0){//大于0时,后面的参数小:
return 1;
}else{//小于0时,前面的参数小:
return -1;
}
}
}
ハッシュマップ
KV キーと値のペアを格納するためのコレクションです。各要素の初期値は Null で、順序付けされていません。
一般的なメソッド: put()、get()
HashMap のデフォルトの長さは 16 で、拡張または初期化された長さは 2 の累乗でなければなりません (位置を決定するとき、衝突の確率は比較的低くなります)。
置くプロセス:
1. キーのハッシュ値を見つけて、添字を計算します
2. 衝突がない場合は、直接バケットに入れます (衝突は、計算されたハッシュ値が同じであり、同じバケットに入れる必要があることを意味します)
3. 衝突が発生した場合、連結リストの形式で後ろにリンクします。
4. 連結リストの長さがしきい値 (TREEIFY THRESHOLD==8) を超えた場合、連結リストを赤黒ツリーに変更します。連結リストの長さが 6 未満の場合、赤黒木を連結リストに戻します。 5. ノードの場合
古い値がすでに存在する場合は置き換えます
。 0.75)
の場合、検索時にハッシュ メソッドを呼び出すためにリサイズ (容量の 2 倍の後に再配置) する必要があり、特定のキーに対応するハッシュを見つけてから、エントリ内の値の検索に進みます。
比較:
ハスプマップ | ツリーマップ |
---|---|
故障中 | 整然とした |
クエリの高速化 | 遅いクエリ |
挿入、削除、検索に適しています | 仕分けに適した |
スレッドセーフではない | スレッドセーフではない |
出力は順不同です | 出力はソートされます |
配列 + 連結リスト + 赤黒木 | 赤黒い木 |
リスト
List は Collection から継承されたインターフェイスであり、要素を繰り返したり、順番に格納したり (実際には挿入順に格納されます)、null を追加したりできます。
配列リスト
基礎となるデータ構造は配列であり、クエリは高速で、追加と削除は低速で、スレッドセーフではなく、効率が高く、繰り返し要素を格納できます。ArrayList は、検索と最後に挿入または削除するのにより適しています。初期容量は10です。
一般的な方法:
方法 | 効果 |
---|---|
追加(E) | 要素を追加 |
set(int インデックス,E 要素) | 指定された位置の要素を上書きします |
remove(int インデックス) | 指定位置の要素を削除する |
get(int インデックス) | 指定位置の要素を取得する |
indexOf(オブジェクト o) | 指定した場所のインデックスを取得する |
イテレータ() | イテレータを取得 |
サイズ() | コレクションのサイズを取得する |
isEmpty() | コレクションが空かどうかを判断する |
クリア() | 空のコレクション |
ストリーム() | コレクションのストリームを作成する |
リンクされたリスト
基礎となるデータ構造は双方向のリンクされたリストであり、クエリが遅く、追加と削除が速く、スレッドに対して安全ではなく、効率が高く、重複する要素を格納できます; inkedList は途中から挿入または削除するのにより適しています
一般的な方法:
方法 | 効果 |
---|---|
getFirst | このリストの最初の要素を返します。 |
getLast | このリストの最後の要素を返します。 |
最初の削除 | このリストから最初の要素を削除して返します。 |
removeLast | このリストから最後の要素を削除して返します。 |
追加 | 指定された要素をこのリストの末尾に追加します。 |
addFirst | 指定された要素をこのリストの先頭に挿入します。 |
サイズ | このリスト内の要素の数を返します。 |
クリア | リストからすべての要素を削除します。この呼び出しが戻った後、リストは空になります。 |
含む | このリストに指定された要素が含まれている場合は true を返します` |
リスト反復子 | リスト内の指定された位置から始まる、このリスト内の要素に対するリスト反復子を (適切な順序で) 返します。 |
ストリーム | コレクションのストリームを作成する |
ベクター
基礎となるデータ構造は、配列、高速なクエリ、低速の追加と削除、スレッド セーフ (ほとんどのメソッドには synchronized キーワードが含まれています)、低効率、繰り返し要素を格納できます。マルチスレッドが関係する場合は、Vector を選択してください。
1、添加 addFirst() addLast()
2、删除 removerFirst() removerLast()
3、获取 getFirst() getLast()
比較
配列リスト | リンクされたリスト | ベクター |
安全でないスレッド、高効率 | 安全でないスレッド、高効率 | スレッドセーフ、低効率 |
配列 | 連結リスト | 配列 |
クエリは高速、追加と削除は低速 | 遅いクエリ、速い追加と削除 | クエリは高速、追加と削除は低速 |
設定
treeMap の主な機能はソートに使用され、LinkedHashSet の主な機能は FIFO が順序付きコレクション (先入れ先出し) であることを確認するために使用され、HashSet は保存されたデータの単なる一般的なコレクションです。
ハッシュセット
最下層は二分木を採用し、要素は無秩序で独特であり、スレッドは安全ではなく、効率が高く、null要素を格納できます。
一般的な方法:
方法 | 効果 |
---|---|
追加 | 要素を追加 |
containsKey(オブジェクト) | 指定したキーがコレクションに含まれているかどうかを問い合わせる |
remove(オブジェクト) | 指定したキーを削除 |
イテレータ | イテレータ |
サイズ() | コレクションのサイズを取得する |
isEmpty() | コレクションが空かどうかを判断する |
クリア() | 空のコレクション |
LinkedHashSet
最下層はリンク リストとハッシュ テーブルによって共同で実装されます. リンク リストは要素の順序が格納順序と一致することを保証し、ハッシュ テーブルは要素の一意性を保証します. スレッドは安全でも効率的でもありません。
一般的な方法:
方法 | 効果 |
---|---|
追加 | 要素を追加 |
containsKey(オブジェクト) | 指定したキーがコレクションに含まれているかどうかを問い合わせる |
remove(オブジェクト) | 指定したキーを削除 |
イテレータ | イテレータ |
サイズ() | コレクションのサイズを取得する |
isEmpty() | コレクションが空かどうかを判断する |
クリア() | 空のコレクション |
ツリーセット
底层采用二叉树实现,元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性;
常用方法:
方法 | 作用 |
---|---|
add | 添加元素 |
containsKey(Object) | 查询集合中是否包含指定键 |
remove(Object) | 删除指定键 |
iteartor | 迭代器 |
size() | 获取集合大小 |
isEmpty() | 判断集合是否为空 |
clear() | 清空集合 |
descendingIterator | 倒叙遍历 |
比较
HashSet | LinkedHashSet | TreeSet |
实现Set接口 | 实现Set接口 | 实现Set接口 |
线程不安全 | 线程不安全 | 线程不安全 |
添加、查询快 | 添加、修改、删除快;有序 | 只有需要对元素进行排序时使用 |
数组+链表+红黑树 | 哈希表+双向链表 | 红黑树 |
可以有null值 | 可以有null值 | 可以有null值 |
List与Set的区别
1、List中元素可以重复,并且是有序的(按照插入的顺序进行存储);Set中的元素是不可重复的(重复元素会被覆盖掉),并且无序。
2、List和Set都继承Collection接口;
3、Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变