セット
コレクション:コンテナ、オブジェクトを保持するコンテナである、基本的なデータ型はインストールできません。
容器のアレイは、基本データ型を保持するために使用される、オブジェクトを保持するために使用することができます。
本質的には、データ構造の対応するセット、インタフェースクラスが実装する複数の達成する必要コレクションと地図シリーズ総称インタフェースを
コレクション
コレクションは、コレクションの要素と呼ばれるオブジェクトのグループを表します。他の人がいない間、いくつかのコレクションは、重複要素を可能にします。他の人が順序付けられていながら、いくつかのコレクションは、発注されます。
コレクションのメソッド:
分類 | 署名方法 | 方法について説明します | |
---|---|---|---|
1 | 加えます | (E eを)追加 | 現在のコレクションに要素オブジェクトを追加します。 |
2 | 加えます | addAll(コレクション<?Eが伸びる>その他) | 複数の要素を追加すること、すべての要素が現在のコレクションの他のセットに追加され、これは、この∪他=。 |
3 | [削除] | クリア() | 空のコレクション |
4 | [削除] | 削除(オブジェクトobj) | 等号のルールに従って、その後、何のオーバーライド型要素は、メソッドに等しくない場合、要素は、削除されるべきかどうかを決定する要素、等号の要素を()を削除リライト等しい場合、それは、==と等価です比較は、より多くのコンテンツになる傾向があります。 |
5 | [削除] | removeAll(コレクション<?>高専) | 、複数の要素を削除して共通の要素と現在のセットを削除C、すなわち、これはこの= - この∩コル。サブセット |
6 | [削除] | retainAll(コレクション<?>高専) | 削除複数の要素、保持及びCがこの∩コルを=ことは、現在のコレクションに共通の要素であり、交差点 |
7 | 検索 | int型のサイズ() | 要素の数を取得します |
8 | 検索 | ブール値が含まれています(オブジェクトobj) | これは、要素が含まれています。要素にはオーバーライド型要素がメソッドに等しくない場合エレメントは、削除されるべきかどうかを決定するために)(等しく、次いで一般的に、規則に従って比較すると等しい書き換え等しい場合、==と等価ですコンテンツ。 |
9 | 検索 | ブールのcontainsAll(コレクション<?>高専) | これは、複数の要素が含まれています。それは本のサブセットであるかどうかコルすなわち、現在のセットが設定コルのすべての要素を含むかどうかを決定します。 |
10 | 検索 | ブールのisEmpty() | コレクションは空です |
11 | トラバーサル | オブジェクト[]のtoArray() | コレクションの要素は、配列を返します |
12 | トラバーサル | イテレータイテレータ() | これは、イテレータオブジェクト、トラバースに設計されたコレクションを返します。 |
取得モード共通の要素のコレクションコレクションという。内部コレクションのIterableインタフェースのすべての実装では、内部クラスが実装インタフェースが存在しますイテレータ
-
public boolean hasNext()
繰り返し処理でさらに要素を持っている場合は[、それはtrueを返します。] public E next()
[次の要素の反復を返します。]
- 無効 削除() [Iteratorを使用して、削除要素を]
イテレータの最初の要素は、次の方法の最初の呼び出しはイテレータが最初の要素を返し、その後、反復子のインデックスの意志を指し、最初の要素の前に次の方法で、反復子のインデックスを、呼び出す前に移動後、第二の要素を指し、等々、のhasNextメソッドの戻りの偽まで、コレクションの最後に到達し、要素のトラバーサルを終了することを示しています。
セットが要素を持っていない、とイテレータのnextメソッドを使用し続けた場合の要素のコレクション中に削除、java.util.NoSuchElementExceptionエラーは何の要素が発生しません
注意:不要在使用Iterator迭代器进行迭代时,调用Collection的remove(xx)方法,否则会报异常java.util.ConcurrentModificationException,或出现不确定行为。
for(元素的数据类型 变量 : Collection集合or数组){
//写操作代码
}
java.lang.Iterable接口,实现这个接口允许对象成为 "foreach" 语句的目标。
java.lang.Iterable接口的抽象方法:
-
public Iterator iterator(): 【获取对应的迭代器】
foreach本质上就是使用Iterator迭代器进行遍历的。
所以也不要在foreach遍历的过程使用Collection的remove()方法。
如果在Iterator、ListIterator迭代器创建后的任意时间从结构上修改了集合(通过迭代器自身的 remove 或 add 方法之外的任何其他方式),则迭代器将抛出 ConcurrentModificationException。这就是Iterator迭代器的快速失败(fail-fast)机制。
结构性修改是指:改变list的size大小,或者,以其他方式改变他导致正在进行迭代时出现错误的结果。
那么如何实现快速失败(fail-fast)机制的呢?
-
在ArrayList等集合类中都有一个modCount变量。它用来记录集合的结构被修改的次数。
-
当我们给集合添加和删除操作时,会导致modCount++。
-
然后当我们用Iterator迭代器遍历集合时,创建集合迭代器的对象时,用一个变量记录当前集合的modCount。例如:
int expectedModCount = modCount;
,并且在迭代器每次next()迭代元素时,都要检查expectedModCount != modCount
注意,迭代器的快速失败行为不能得到保证,
自定义类时如果一个实现类不希望提供fail-fast迭代器,则可以忽略这个字段。
-
-
它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
-
集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。
ArrayList:动态数组 Vector:动态数组 LinkedList:双向链表 Stack:栈
1、添加元素
-
void add(int index, E ele) 【在[index]位置添加一个元素】
-
boolean addAll(int index, Collection<? extends E> eles) 【在[index]位置添加多个元素】
2、获取元素
-
-
List subList(int fromIndex, int toIndex) 【截取[fromIndex,toIndex)部分的元素】
3、获取元素索引
-
int indexOf(Object obj) 【返回obj在当前集合中第一次出现的下标】
-
int lastIndexOf(Object obj) 【返回obj在当前集合中最后一次出现的下标】
4、删除和替换元素
-
E remove(int index) 【删除[index]位置的元素,返回被删除的元素】
-
E set(int index, E ele) 【替换[index]位置的元素,返回被替换的元素】
5、遍历
ListIterator listIterator() 【默认游标在[0]开始】
ListIterator listIterator(int index) 【默认游标在[index]位置】
-
-
void set(E e): 【用指定元素替换 next 或 previous 返回的最后一个元素】
-
void remove(): 【从列表中移除由 next 或 previous 返回的最后一个元素】
-
boolean hasPrevious(): 【如果以逆向遍历列表,往前是否还有元素。则返回 true】
-
E previous(): 【返回列表中的前一个元素。】
-
int previousIndex(): 【返回列表中的前一个元素的索引】
-
boolean hasNext() 【以正向遍历列表时,如果列表迭代器有多个元素,则返回 true】
-
E next() 【返回列表中的下一个元素。】
-
int nextIndex() 【返回对 next 的后续调用所返回元素的索引。】
Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败。
Set集合支持的遍历方式和Collection集合一样:foreach和Iterator。
HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。
java.util.HashSet
底层的实现其实是一个java.util.HashMap
支持,然后HashMap的底层物理实现是一个Hash表。
HashSet/LinkedHashSet:
底层结构:里面维护了一个TreeMap,都是基于红黑树实现的!
特点: 1、不允许重复 2、实现排序, 自然排序或定制排序
如果使用的是自然排序(Comparable),则通过调用实现的compareTo方法
自然排序:它判断两个对象是否相等的唯一标准是:两个对象通过 compareTo(T o) 方法比较返回值为0。
如果使用的是定制排序(Comparator),则通过调用比较器的compare方法
Collection
中的集合称为单列集合,Map
中的集合称为双列集合。java.util.Map<K,V>
1、存储键值对(key,value),也称为映射关系,键值对是Map.Entry接口的实现类对象。
2、所有存储到Map中的key不能重复, 每个键只能对应一个值(这个值可以是单个值,也可以是个数组或集合值)。
Map接口的API
1、添加
V put(K key, V value): 【将一对键值对添加到当前map中,同一个key如果put两次,第二次会覆盖上次的value】
void putAll(Map m): 【将另一个map中的所有键值对添加到当前map中】
2、删除
void clear(): 【清空所有映射关系】
V remove(Object key): 【根据key删除一整对键值对(key,value)】
3、查询
int size(): 【返回键值对的数量】
boolean containsKey(Object key): 【是否包含某个key】
boolean containsValue(Object value): 【是否包含某个value】
V get(Object key): 【根据key获取value值,如果此映射不包含该键的映射关系,则返回 null
。】
boolean isEmpty() 【如果此映射未包含键-值映射关系,则返回 true。】
4、遍历
Set<Entry<K,V>> entrySet() 【遍历所有的键值对,映射关系的 Set
视图 】
Set<K> keySet() 【遍历所有的key,键的 Set
视图】
Collection<V> values() 【遍历所有的value,值的 Collection
视图】
若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值。
Map的遍历,不能支持foreach
(1)分开遍历:
-
单独遍历所有key
-
单独遍历所有value
(2)成对遍历:
Map接口的常用实现类:HashMap、TreeMap、LinkedHashMap和Properties。其中HashMap是 Map 接口使用频率最高的实现类。
-
HashMap和Hashtable都是哈希表。
-
-
Hashtable是线程安全的,任何非 null 对象都可以用作键或值。不允许null键
-
HashMap是线程不安全的,并允许使用 null 值和 null 键。
LinkedHashMap
TreeMap
Properties
Properties 类是 Hashtable 的子类,Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
データにアクセスするとき、私たちはのsetProperty(String型のキー、文字列値)とメソッドのgetProperty(String key)メソッドをお勧めします。
APIドキュメントを参照するにはより多くの方法
セットとセットの間の地図セットの関係
レッツは、セットに一つだけの要素を保存するだけでなく、それを(キー、値)になる方法?
本来、キーの内部実装としてマップに追加要素の集合は、値として定数存在する物体オブジェクトが続きます。