Map Set list 理解
?
?
對JAVA的集合的理解是想對于數(shù)組
??數(shù)組是大小固定的,并且同一個數(shù)組只能存放類型一樣的數(shù)據(jù)(基本類型/引用類型)?
??JAVA集合可以存儲和操作數(shù)目不固定的一組數(shù)據(jù)。???所有的JAVA集合都位于?java.util包中!
??JAVA集合只能存放引用類型的的數(shù)據(jù),不能存放基本數(shù)據(jù)類型.??
?JAVA集合主要分為三種類型:
? ? ? ? Set(集)??
? ? ? ? List(列表)?
? ? ? ? Map(映射)??
??????? Collection?接口
根據(jù)對象的特性為對象生成一個唯一標(biāo)識符的方法
Object中HashCode()是hash的一個應(yīng)用:拿對象的內(nèi)存地址經(jīng)過運(yùn)算作為對象的唯一標(biāo)識符
底層還是數(shù)組+單向鏈表
?? ?我們把下標(biāo)是字符串的數(shù)組叫關(guān)聯(lián)數(shù)組
?? ?數(shù)組的下標(biāo)是一個字符串
無序可重復(fù)
Hash(哈希)
?? ?根據(jù)對象的特性為對象生成一個唯一標(biāo)識符的方法
?? ?Object中HashCode()是hash的一個應(yīng)用:拿對象的內(nèi)存地址經(jīng)過運(yùn)算作為對象的唯一標(biāo)識符
HashMap
?? ?底層還是數(shù)組+單向鏈表
?? ??? ?我們把下標(biāo)是字符串的數(shù)組叫關(guān)聯(lián)數(shù)組
?? ??? ?數(shù)組的下標(biāo)是一個字符串
?
?
Map集合
Map沒有繼承Collection接口。也就是說Map和Collection是2種不同的集合。Collection可以看作是(value)的集合,而Map可以看作是(key,value)的集合。
Map接口由Map的內(nèi)容提供3種類型的集合視圖,一組key集合,一組value集合,或者一組key-value映射關(guān)系的集合
Map接口
public interface Map
{
//
public static interface Entry
{
????? public abstract Object getKey();
????? public abstract Object getValue();
????? public abstract Object setValue(Object obj);
????? //...
}
//作用基本等同Collection接口的方法
public abstract int size();
public abstract boolean isEmpty();
public abstract boolean containsKey(Object obj);
public abstract boolean containsValue(Object obj);
public abstract Object get(Object obj);
public abstract Object put(Object obj, Object obj1);
public abstract Object remove(Object obj);
public abstract void clear();
//添加map里包含的所有元素
public abstract void putAll(Map map);
//key集合
public abstract Set keySet();
//value集合
public abstract Collection values();
//key-value映射關(guān)系的集合Set<Entry>
public abstract Set entrySet();
//...
}
?
無序不可重復(fù)
?? ?HashMap:鍵的部分
SortedSet
?? ?紅黑樹
HashSet
?? ?HashTable
Set
?? ?無序不可重復(fù)
?? ??? ?HashMap:鍵的部分
?? ?HashSet
?? ??? ?HashTable
?? ?SortedSet
?? ??? ?紅黑樹
?
Set集合
Set繼承自Collection接口。Set是一種不能包含有重復(fù)元素的集合,即對于滿足e1.equals(e2)條件的e1與e2對象元素,不能同時存在于同一個Set集合里,換句話說,Set集合里任意兩個元素e1和e2都滿足e1.equals(e2)==false條件,Set最多有一個null元素。
因?yàn)镾et的這個制約,在使用Set集合的時候,應(yīng)該注意:
1,為Set集合里的元素的實(shí)現(xiàn)類實(shí)現(xiàn)一個有效的equals(Object)方法。
2,對Set的構(gòu)造函數(shù),傳入的Collection參數(shù)不能包含重復(fù)的元素。
Set接口里定義的方法與Collection基本一樣,這里不再重述。
?
?
有序可重復(fù)
ArrayList
?? ?底層是一個索引數(shù)組
?? ?有序:靠索引數(shù)組的下標(biāo)
List
?? ?有序可重復(fù)
?? ?ArrayList
?? ??? ?底層是一個索引數(shù)組
?? ??? ?有序:靠索引數(shù)組的下標(biāo)
?? ?LinkedList
?? ??? ?底層是一個鏈表
?? ??? 有序:靠鏈表的先后維持
?
List集合
List繼承自Collection接口。List是一種有序集合,List中的元素可以根據(jù)索引(順序號:元素在集合中處于的位置信息)進(jìn)行取得/刪除/插入操作。
跟Set集合不同的是,List允許有重復(fù)元素。對于滿足e1.equals(e2)條件的e1與e2對象元素,可以同時存在于List集合中。當(dāng)然,也有List的實(shí)現(xiàn)類不允許重復(fù)元素的存在。
同時,List還提供一個listIterator()方法,返回一個ListIterator接口對象,和Iterator接口相比,ListIterator添加元素的添加,刪除,和設(shè)定等方法,還能向前或向后遍歷。
List接口添加的主要方法有:
public interface List
extends Collection
{
//... other Collection methods
//根據(jù)索引取得元素
public abstract Object get(int i);
//在指定位置(索引)處插入新的元素
public abstract Object set(int i, Object obj);
//在List的尾部插入新的元素
public abstract void add(int i, Object obj);
//刪除指定位置(索引)處的元素
public abstract Object remove(int i);
//取得指定對象的最開始的索引位置
public abstract int indexOf(Object obj);
//取得指定對象的最后的索引位置
public abstract int lastIndexOf(Object obj);
//List提供的新的遍歷方法
public abstract ListIterator listIterator();
//從指定位置i處開始迭代。最初next()方法返回的將是位置i處的元素。
public abstract ListIterator listIterator(int i);
//取得從位置i到j(luò)的所有元素(包含i但不包含j位置的元素),返回一個新的集合對象。
public abstract List subList(int i, int j);
}
???
集合的遍歷:
所有java.util.Collection的實(shí)現(xiàn)類必須實(shí)現(xiàn)
public abstract Iterator iterator();
方法以支持對所包含的對象進(jìn)行遍歷。
java.util.Iterator
+--java.util.ListIterator
Iterator接口:
public interface Iterator
{
//判斷是否存在下一個元素
public abstract boolean hasNext();
//返回下一個可用的元素
public abstract Object next();
//移除當(dāng)前元素
public abstract void remove();
}
ListIterator接口:
public interface ListIterator
extends Iterator
{
//other methods defined in Iterator
//判斷是否存在上一個元素
public abstract boolean hasPrevious();
//返回上一個可用的元素
public abstract Object previous();
//取得下一個可用元素的索引位置
public abstract int nextIndex();
//取得上一個可用元素的索引位置
public abstract int previousIndex();
//替換當(dāng)前位置的元素
public abstract void set(Object obj);
//在當(dāng)前位置插入新元素
public abstract void add(Object obj);
}
接口類圖關(guān)系
?
轉(zhuǎn)載于:https://www.cnblogs.com/lianggnail/p/4685081.html
總結(jié)
以上是生活随笔為你收集整理的Map Set list 理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux jstat 命令监控gc情况
- 下一篇: uva 11978 Fukushima