java的集合:List、Set和Map
虛線是接口,實線是實現類:
集合能夠解決的問題:集合可以麗杰為是一種更高級的數組,可以保存多條數據
本質:java官方開發人員基于java的一些基礎內容(數組等等)創建了一些接口和類,然后使用這些接口和類的對象來更加靈活的保存或處理多條數據。
Object是一個比較特殊的類型,在Java中有這樣的一條設定,Object類是任何類的父類;
List:有序集合,類似與數組,也是給里面的元素進行了默認的排序,根據時間先后順序排序的
用add方法向list里面添加元素,可以添加不同種類的元素
import java.util.ArrayList; import java.util.List;public class App {public static void main(String[] args){/*** 保存幾個學習成績,99,98,88,89*///因為list是一個接口,所以右半邊不可以寫new List();必須寫他的實現類List list = new ArrayList(); //底層是一個數組 LinkedList底層是一個鏈表list.add(99);list.add(89);list.add(88);list.add(98);System.out.println(list);for(int i=0;i<list.size();i++){System.out.println(list.get(i));}} }List和數組的區別:
1.集合中的數據類型是沒有必然的要求的
2.這個list幾個沒有長度限制
ArrayList和LinkedList的區別:
?List的泛形:指定某種類型,list 中只能存放指定的類型,比如下面的一個例子:存放一個Video類型的
package jihe;public class Video {private String name;private String type;public Video(String name, String type) {this.name = name;this.type = type;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getType() {return type;}public void setType(String type) {this.type = type;} } package jihe;import java.util.ArrayList; import java.util.List;public class App {public static void main(String[] args){Video video1 = new Video("我不是藥神","劇情");Video video2 = new Video("風雨咒","動畫");Video video3 = new Video("延禧攻略","電視劇");List<Video> list = new ArrayList<Video>();list.add(video1);list.add(video2);list.add(video3);for(Video video:list){System.out.println("名字是:"+video.getName()+",類型是:"+video.getType());}} }結果:
?
Set集合:無序集合,在放入元素時會有特點的算法為元素進行排序,但是這個算法我們猜測不到,跟先后順序也無關。因此沒有跟List一樣的下標去表示里面元素,元素不可重復
?
package jihe;import java.util.HashSet; import java.util.Set;public class App {public static void main(String[] args){Video video1 = new Video("我不是藥神","劇情");Video video2 = new Video("風雨咒","動畫");Video video3 = new Video("延禧攻略","電視劇");Set<Video> set = new HashSet<Video>();set.add(video1);set.add(video2);set.add(video3);//循環只能用增強循環,因為無序,沒有下標for(Video video:set){System.out.println("名字是:"+video.getName()+",類型是:"+video.getType());}} }結果:和上面的list不一樣是無序的
?
Map集合:功能比較強大,Map是放入鍵(key)值(value)對的形式放入。
?
package jihe;import java.util.*;public class App {public static void main(String[] args){Video video1 = new Video("我不是藥神","劇情");Video video2 = new Video("風雨咒","動畫");Video video3 = new Video("延禧攻略","電視劇");Map<String,Video> map = new HashMap<>();map.put("我不是藥神",video1);map.put("風雨咒",video2);map.put("延禧攻略",video3);for(String key : map.keySet()){System.out.println("名字是:"+map.get(key).getName()+",類型是:"+map.get(key).getType());}} }Map的遍歷4種方式:
package jihe;import java.util.HashMap; import java.util.Iterator; import java.util.Map;public class Test {/*** 方式一 這是最常見的并且在大多數情況下也是最可取的遍歷方式。在鍵值都需要時使用。*/public void test(){Map<Integer, Integer> map = new HashMap<>();for (Map.Entry<Integer, Integer> entry : map.entrySet()) {System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());}}/*** 方法二 在for-each循環中遍歷keys或values,* 如果只需要map中的鍵或者值,你可以通過keySet或values來實現遍歷,而不是用entrySet。* 該方法比entrySet遍歷在性能上稍好(快了10%),而且代碼更加干凈。*/public void test1(){Map<Integer, Integer> map = new HashMap<>();//遍歷map中的鍵for (Integer key : map.keySet()) {System.out.println("Key = " + key);}//遍歷map中的值for (Integer value : map.values()) {System.out.println("Value = " + value);}}/*** 方法三使用Iterator遍歷,使用泛型:*/public void test2(){Map<Integer, Integer> map = new HashMap<>();Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();while (entries.hasNext()) {Map.Entry<Integer, Integer> entry = entries.next();System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());}}/*** 方法三使用Iterator遍歷 ,不使用泛型* 你也可以在keySet和values上應用同樣的方法。** 該種方式看起來冗余卻有其優點所在。首先,在老版本java中這是惟一遍歷map的方式。另一個好處是,你可以在遍歷時調用iterator.remove()來刪除entries,另兩個方法則不能。根據javadoc的說明,如果在for-each遍歷中嘗試使用此方法,結果是不可預測的。** 從性能方面看,該方法類同于for-each遍歷(即方法二)的性能。*/public void test3(){Map map = new HashMap();Iterator entries = map.entrySet().iterator();while (entries.hasNext()) {Map.Entry entry = (Map.Entry) entries.next();Integer key = (Integer)entry.getKey();Integer value = (Integer)entry.getValue();System.out.println("Key = " + key + ", Value = " + value);}}/*** 方法四、通過鍵找值遍歷(效率低)*/public void test4() {Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (Integer key : map.keySet()) {Integer value = map.get(key);System.out.println("Key = " + key + ", Value = " + value);}}}總結
如果僅需要鍵(keys)或值(values)使用方法二。如果你使用的語言版本低于java 5,或是打算在遍歷時刪除entries,必須使用方法三。否則使用方法一(鍵值都要)。
?
轉載于:https://www.cnblogs.com/peiminer/p/10033868.html
總結
以上是生活随笔為你收集整理的java的集合:List、Set和Map的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell (2) 时间处理
- 下一篇: 设计模式-创建型模式-工厂模式(工厂三兄