天天看點

java list鍵值_java基礎之集合(List,Set,Map)

集合

List和Set接口

Map接口

集合有什麼作用?

Java中有哪幾種集合?

在之前我們學習過數組,但是發現數組有兩個缺點:

·數組的大小不能夠随意的更改

·數組中存放的元素必須是相同的資料類型

集合是一個可以改變大小,可以儲存不同對象,沒有基本資料類型的存儲的概念,在開發中并不建議在同一個集合中存放不同的類型對象。

集合的劃分:Collection是集合最高的父接口,常用的子接口或者實作類有以下幾種:

List

Set

Vector

鍵值對:map

List接口

List接口在開發中常用的實作類有兩種:

·ArrayList:是動态數組的資料結構

·LinkedList:是連結清單資料結構

兩種實作類操作方法類似:

·boolean add(E e):添加元素

·void add(int index,  E element):在指定位置添加元素

·boolean addAll(Collection extends E> c):将一個集合中的所有元素添加到集合

·void clear():清除集合中所有的元素

·E get(int index):取得指定位置的元素

·int indexOf(Object o):查找是否有指定元素存在,存在傳回下表,不存在傳回-1

·Iterator iterator():傳回一個疊代器對象

·boolean isEmpty():判斷集合是否為空

·E remove(int index):移除指定位置的元素

·boolean remove(Object o):移除指定元素

·boolean removeAll(Collection> c):從集合中移除一個集合

·E set(int index, E element):将指定位置設定為指定元素

·int size():傳回集合長度

當然還有一個問題,在開發中,定義集合的時候,最好能夠定義泛型,表示此集合隻能存放此種類型的對象。

packagecom.wanczy.collection;importjava.util.ArrayList;importjava.util.List;public classCollectionDemo01 {public static voidmain(String[] args) {

List list = new ArrayList();//定義泛型合計//Person p1 = new Person("張三");//Person p2 = new Person("李四");//Person p3 = new Person("王五");//Person p4 = new Person("趙六");

Computer c1= new Computer("I3");

Computer c2= new Computer("I3");

Computer c3= new Computer("I3");//list.add(p1);//list.add(p2);//list.add(p3);//list.add(p4);

list.add(c1);

list.add(c2);

list.add(c3);

}

}

在list集合中,是可以存放相同元素的。

List集合的輸出:

·使用for循環

·使用疊代器

使用增強型for循環

List list = new ArrayList();//定義泛型

Day03 d= new Day03("吳");

Day03 d1=new Day03("11");

Day03 d2=new Day03("22");

list.add(d);

list.add(d1);

list.add(d2);

list.add(d);

list.add(d1);

list.add(d2);

list.add(d);

list.add(d1);

list.add(d2);list.add(d);

list.add(d1);

list.add(d2);System.out.println("增強型for循環");for(Day03 dd : list) {

System.out.print(dd.getNameT()+" ");

}

System.out.println("疊代器");

Iterator< Day03> it = list.iterator();//取得疊代器對象

while(it.hasNext()){

Day03 dd= it.next();//取得元素

System.out.println(dd.getNameT()+" ");

}

我們在開發中,優先使用疊代進行集合輸出,因為疊代器的效率更高。在開發過程中,還會遇到一個問題,就是判斷集合是否存在元素:

·isEmpty()

·size() == 0

List集合的兩個常用的實作類的差別:

·ArrayList:是實作了基于動态數組的資料結構,對于随機的添加和删除元素來說,需要移動資料

·LinkedList:對于新增和删除來說,比較占優勢,但是對于通路來說,ArrayList比較占優勢,因為LinkedList需要連結清單開頭開始。

SET集合

在開發中實際上不經常使用,但是我們在JDBC操作資料庫的時候,對于查詢來說,ResultSet接口是用來接收查詢的結果集的,而ResultSet實際上也是一種Set集合。而且在後期我們講道架構的時候,也是會使用到Set集合的。

Set 集合的操作基本上List集合是一緻的,我們知道List集合常用的兩個實作類是ArrayList和LinkedList,那麼對于Set集合來說,也有兩個常用的實作類:

·HashSet

·TreeSet

Set集合和List集合的差別在于,Set集合不允許放置相同的元素,如果有相同元素加入的話,後面加入的會把前面加入的給覆寫。

通過程式,我們可以發現,除了不能放置重複的元素外,HashSet集合還是散列存儲的,也就是說無序存儲的。

對于TreeSet來說,相比HashSet,主要差別就是TreeSet是有序存儲的,是升序存儲的。

Set set = new TreeSet();//定義泛型合計

set.add("b");

set.add("e");

set.add("h");

set.add("d");

set.add("a");

set.add("c");

System.out.println();

System.out.println("-------------增強型for循環------------------");for(String c:set) {

System.out.print(c+"\t");

}

System.out.println();

System.out.println("-------------使用疊代器------------------");

Iterator it = set.iterator();//取得疊代器對象

while(it.hasNext()){//判斷是否還有元素

System.out.print(it.next()+"\t");

}

Vector集合

Vector本身就是一個類,是Collection接口的實作類,是比較早出現的集合,在List集合出現之前就已經出現,而且現在也基本上淘汰了,是一個同步的集合,允許速度相比List集合而言,會比較慢。

可以得出List和Vector的差別

序号

List

Vector

1

異步

同步

2

可以使用Iterator

使用Enumeration

3

出現比較晚,使用較多

出現比較早,使用較少

4

增加元素,長度增加1.5倍

增加元素,長度增加2倍

Map集合

我們有一種類似于電話本的存儲方式:

鍵值

張三----133241243

李四----14321243

王五----1234214312

主要功能就是完成查找,而不是作為輸出使用,在開發中,鍵是不能重複的,鍵的内容一般為字元串類型。Map接口常用的兩個實作類:

·HashMap:

·TreeMap:按照鍵升序排列

常用的操作方法:

·void clear():清楚所有的鍵值對

·Set keySet():将所有的鍵放到一個Set集合中

·V get(Object key):通過鍵取得值

·boolean isEmpty():判斷是否為空

·V put(K key, V value):添加元素

·V remove(Object key):通過鍵删除元素

·void putAll(Map extends K,? extends V> m):将一個Map中所有元素加入

·int size():取得Map集合的長度

基本上常用的操作方法都是基于鍵的。

Map tel = new HashMap();

tel.put("張三", "12341243");

tel.put("李四", "243587");

String telS= tel.get("李四");

System.out.println(telS);

我們說過,Map集合的主要的操作是基于鍵的,而且主要功能是查找,如果說非要對Map集合進行輸出呢?

public static voidmain(String[] args) {

Map tel = new HashMap();

tel.put("張三", "12341243");

tel.put("李四", "243587");

String telS= tel.get("李四");//通過鍵取值//System.out.println(telS);

Set set = tel.keySet();//轉換成Set集合

Iterator it =set.iterator();while(it.hasNext()){

String s=it.next();

System.out.println(s+ "============" +tel.get(s));

}

對于TreeSet而言,差別就在于通過鍵進行了升序排列:

總結

·掌握List接口下常用的ArrayList、LinkList類

·掌握Set接口下常用的HashSet類

·掌握Map複合類集的用法