list基本用法
java.util.List接口繼承自Collection接口,是單列集合的一個重要分支,習(xí)慣性地會將實(shí)現(xiàn)了List接口的對象稱為List集合。在List集合中允許出現(xiàn)重復(fù)的元素,所有的元素是以一種線性方式進(jìn)行存儲的,在程序中可以通過索引來訪問集合中的指定元素。另外,List集合還有一個特點(diǎn)就是元素有序,即元素的存入順序和取出順序一致。
1 基本操作:
public static void main(String[] args) {
// 創(chuàng)建List集合對象
List<String> list = new ArrayList<String>();
// 往 尾部添加 指定元素
list.add("小狗子");
list.add("小猴子");
list.add("小毛驢");
System.out.println(list);
// add(int index,String s) 往指定位置添加
list.add(1,"沒頭腦");
System.out.println(list);
// String remove(int index) 刪除指定位置元素 返回被刪除元素
// 刪除索引位置為2的元素
System.out.println("刪除索引位置為2的元素");
System.out.println(list.remove(2));
System.out.println(list);
// String set(int index,String s)
// 在指定位置 進(jìn)行 元素替代(改)
// 修改指定位置元素
list.set(0, "小雞仔");
System.out.println(list);
// String get(int index) 獲取指定位置元素
// 跟size() 方法一起用 來 遍歷的
for(int i = 0;i<list.size();i++){
System.out.println(list.get(i));
}
//還可以使用增強(qiáng)for
for (String string : list) {
System.out.println(string);
}
}
}
2 list的常用子類ArrayList集合和LinkedList集合.
?ArrayList集合數(shù)據(jù)存儲的結(jié)構(gòu)是數(shù)組結(jié)構(gòu)。元素增刪慢,查找快,由于日常開發(fā)中使用最多的功能為查詢數(shù)據(jù)、遍歷數(shù)據(jù),所以ArrayList是最常用的集合。
?LinkedList`集合數(shù)據(jù)存儲的結(jié)構(gòu)是鏈表結(jié)構(gòu)。方便元素添加、刪除的集合。LinkedList提供了大量操作的方法如:
-
public void addFirst(E e):將指定元素插入此列表的開頭。 -
public void addLast(E e):將指定元素添加到此列表的結(jié)尾。 -
public E getFirst():返回此列表的第一個元素。 -
public E getLast():返回此列表的最后一個元素。 -
public E removeFirst():移除并返回此列表的第一個元素。 -
public E removeLast():移除并返回此列表的最后一個元素。 -
public E pop():從此列表所表示的堆棧處彈出一個元素。 -
public void push(E e):將元素推入此列表所表示的堆棧。 -
public boolean isEmpty():如果列表不包含元素,則返回true。
set集合
?Set接口和List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對Collection接口進(jìn)行功能上的擴(kuò)充,只是比Collection接口更加嚴(yán)格了。與List接口不同的是,Set接口中元素?zé)o序,并且都會以某種規(guī)則保證存入的元素不出現(xiàn)重復(fù)。
?HashSet是Set接口的一個實(shí)現(xiàn)類,它所存儲的元素是不可重復(fù)的,并且元素都是無序的(即存取順序不一致)。HashSet底層的實(shí)現(xiàn)其實(shí)是一個HashMap支持。HashSet是根據(jù)對象的哈希值來確定元素在集合中的存儲位置,因此具有良好的存取和查找性能。保證元素唯一性的方式依賴于:hashCode與equals方法。
?LinkedHashSet與HashSet的區(qū)別是,它是鏈表和哈希表組合的一個數(shù)據(jù)存儲結(jié)構(gòu)??梢员WC存儲元素唯一和存取元素有序.
set集合存儲不重復(fù)的元素的原理
?保證HashSet集合元素的唯一,其實(shí)就是根據(jù)對象的hashCode和equals方法來決定的。如果我們往集合中存放自定義的對象,那么保證其唯一,就必須復(fù)寫hashCode和equals方法建立屬于當(dāng)前對象的比較方式。之所以可以實(shí)現(xiàn)不重復(fù), 這是因為set集合在調(diào)用add方法的時候,add方法會調(diào)用元素的hashCode和equal是方法.判斷元素是否重復(fù).
?結(jié)論:兩元素的哈希值相同,equals方法返回ture,則認(rèn)定為元素相同.對應(yīng)元素不會被存儲到集合中,反之為元素不同,存儲.
?分析
?set.add(s1);
1)首先add方法會調(diào)用s1的hashCode方法, 計算字符串s1的哈希值(假設(shè)s1的哈希值為93672), 則會在集合中查找有沒有哈希值為93672的元素,如果沒有,則會把當(dāng)前元素存儲到集合中.
2)若發(fā)現(xiàn)集合中已經(jīng)存在哈希值為93672這個元素, 則會產(chǎn)生哈希沖突.s1元素會繼續(xù)調(diào)用equals方法進(jìn)行比較,即s1.equals(相同哈希值的元素);若返回ture.則是兩元素的哈希值相同,equals方法返回ture,判定為兩元素相同.就不會把s1存儲到對應(yīng)的集合中.