亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

java學習筆記11--集合總結

2019-11-14 22:12:42
字體:
來源:轉載
供稿:網友
java學習筆記11--集合總結

java學習筆記系列:

java學習筆記10--泛型總結

java學習筆記9--內部類總結

java學習筆記8--接口總結

java學習筆記7--抽象類與抽象方法

java學習筆記6--類的繼承、Object類

java學習筆記5--類的方法

java學習筆記4--對象的初始化與回收

java學習筆記3--類與對象的基礎

java學習筆記2--數據類型、數組

java學習筆記1--開發環境平臺總結

本文地址:http://www.49028c.com/archimedes/p/java-study-note11.html,轉載請注明源地址。

Java集合框架概述

集合就是將若干用途相同、近似的“數據”結合成一個整體。

集合從體系上分為三種:

(1) 列表(List):List集合區分元素的順序,允許包含相同的元素。

(2) 集(Set):Set集合不區分元素的順序,不允許包含相同的元素。

(3) 映射(Map):Map集合保存的”鍵”-“值”對,“鍵”不能重復,而且一個“鍵”只能對應一個“值”。

Java集合中只能保存引用數據類型,也就是保存的是對象的地址,而非對象本身。集合中元素相當于引用類型的變量。

JDK所提供的容器API全部位于java.util包中。

Java集合主要包括三種類型:Set(集),List(列表),Map(映射)。

Java集合類框圖:

Collection和Iterator接口

在Collection接口中聲明了適用于Java集合(只包括Set和List)的通用方法。因此Set和List對象可以調用以上方法,Map對象不可以。

Iterator接口隱藏了底層集合的數據結構,向客戶程序提供了遍歷各種數據集合的統一接口。

如果集合中的元素沒有排序,Iterator遍歷集合中元素的順序是任意的,并不一定與集合中加入元素的順序是一致的。

Collection接口中的方法:

booleanadd(Eo)確保此 collection 包含指定的元素(可選操作)
void clear()移除此 collection 中的所有元素(可選操作)
booleancontains(Objecto)如果此 collection 包含指定的元素,則返回 true
booleanisEmpty()如果此 collection 不包含元素,則返回 true
Iterator<E>iterator()返回在此 collection 的元素上進行迭代的迭代器
booleanremove(Objecto)從此 collection 中移除指定元素的單個實例,如果存在的話(可選操作)
int size()返回此 collection 中的元素數
Object[]toArray()返回包含此 collection 中所有元素的數組

Collection方法舉例:

public class javatest {      public static void main(String args[]) {         Collection c = new ArrayList();        c.add("Hello World!");    //添加String類型對象        c.add(new Integer(100));    //添加Integer類型對象        c.add(new Float(2323.45f));    //添加Float類型對象        System.out.PRintln(c.size());        System.out.println(c);   }}
List接口以及實現類

List是Collection的子接口,實現List接口的容器中存放的對象是有順序的,而且可以重復。List容器中存放的對象都有一個整數型的序號,記錄該對象在容器中的位置,可以根據序號來訪問容器中的元素。

JDK提供實現List接口的類有ArrayList、LinkedList等。相關方法如下:

Object get(int index)Object set(int index,Object obj)void add(int index,Object obj)Object remove(int index)int indexOf(Object obj)int lastIndexOf(Object obj)

List接口舉例:

public class javatest {      public static void main(String args[]) {         List li=new ArrayList();        for(int i=0;i<10;i++)            li.add("a"+i);        System.out.println(li);        li.add(3,"a20");        System.out.println(li);        li.set(4,"a30");        System.out.println(li);        System.out.println((String)li.get(2));        li.remove(0);        System.out.println(li);   }}

運行結果如下:

[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9][a0, a1, a2, a20, a3, a4, a5, a6, a7, a8, a9][a0, a1, a2, a20, a30, a4, a5, a6, a7, a8, a9]a2[a1, a2, a20, a30, a4, a5, a6, a7, a8, a9]

List接口的實現類-ArrayList

java.util.ArrayList實現了List接口,用于描述長度可變的數組列表(底層采用數組實現)。ArrayList允許元素取值為null,提供了一些新增的方法來操作列表的容量的大小。

public ArrayList()public ArrayList(int initialCapacity)public void ensureCapacity(int minCapacity)public void trimToSize()

ArrayList舉例:

ArrayList list=new ArrayList(6);list.add("codingwu");list.add(new Integer(10));list.add(new Double(10.5));        System.out.println(list.size());Object item[]=list.toArray();for(int i=0;i<item.length;i++)    System.out.println(item[i]);list.trimToSize();     

List接口的實現類-Vector

java.util.Vector實現了List接口,用于描述長度可變的數組向量(底層采用數組實現)。

與ArrayList的區別:Vector是線程安全的(同步),用在多線程環境中,運行效率慢。ArrayList不是線程安全的,用在單線程環境中。

Vector類的新增方法:

public Vector()public Object elementAt(int index)public void removeElement(int index)public void insertElement(Object obj,int index)public boolean removeElement(Object obj)public void removeAllElements()public Object toArray()
Map接口以及實現類

以該接口為根的集合類,用于存儲“關鍵字”(key)和“值”(value)的元素對,其中每個關鍵字映射到一個值,當需要通過關鍵字實現對值的快速存取時使用

聲明的抽象方法主要有:

查詢方法、修改方法

兩個主要實現類:

HashTable、HashMap

查詢方法

int size() —— 返回Map中的元素個數

boolean isEmpty() —— 返回Map中是否包含元素,如不包括任何元素,則返回true

boolean containsKey(Object key) —— 判斷給定的參數是否是Map中的一個關鍵字(key)

boolean containsValue(Object val) —— 判斷給定的參數是否是Map中的一個值(value)

Object get(Object key) —— 返回Map中與給定關鍵字相關聯的值(value)

Collection values() —— 返回包含Map中所有值(value)的Collection對象

Set keySet() ——返回包含Map中所有關鍵字(key)的Set對象

Set entrySet() —— 返回包含Map中所有項的Set對象

修改方法

Object put(Object key, Object val) —— 將給定的關鍵字(key)/值(value)對加入到Map對象中。其中關鍵字(key)必須唯一,否則,新加入的值會取代Map對象中已有的值

void putAll(Map m) —— 將給定的參數Map中的所有項加入到接收者Map對象中

Object remove(Object key) —— 將關鍵字為給定參數的項從Map對象中刪除

void clear() —— 從Map對象中刪除所有的項

哈希表

也稱為散列表,是用來存儲群體對象的集合類結構,其兩個常用的類是HashTable及HashMap

哈希表存儲對象的方式與前面所講的數組,Vector及ArrayList不同。數組、Vector及ArrayList中對象的存儲位置是隨機的,即對象本身與其存儲位置之間沒有必然的聯系。因此查找一個對象時,只能以某種順序(如順序查找,二分查找)與各個元素進行比較,如果數組或向量中的元素數量很龐大時,查找的效率必然降低

哈希表中,對象的存儲位置和對象的關鍵屬性k之間有一個特定的對應關系f,我們稱之為哈希(Hash)函數。它使每個對象與一個唯一的存儲位置相對應。因而在查找時,只要根據待查對象的關鍵屬性k,計算f(k)的值即可知其存儲位置

哈希表相關的一些主要概念:

容量(capacity)—— 哈希表的容量不是固定的,隨對象的加入,其容量可以自動擴充

關鍵字/鍵(key)—— 每個存儲的對象都需要有一個關鍵字key,key可以是對象本身,也可以是對象的一部分(如對象的某一個屬性)

哈希碼(hash code)—— 要將對象存儲到HashTable,就需要將其關鍵字key映射到一個整型數據,稱為key的哈希碼(hash code)

哈希函數(hash function)——返回對象的哈希碼

項(item)—— 哈希表中的每一項都有兩個域:關鍵字域key及值域value(即存儲的對象)。key及value都可以是任意的Object類型的對象,但不能為空(null),HashTable中的所有關鍵字都是唯一的

裝填因子(load factor)—— (表中填入的項數)/(表的容量)

構造方法:
Hashtable( ); // 初始容量為101,最大裝填因子為0.75Hashtable(int capacity);Hashtable(int capacity, float maxLoadFactor);

Object put(Object key, Object value) —— 值value以key為其關鍵字加入到哈希表中,如果此關鍵字在表中不存在,則返回null,否則表中存儲的value

Hashtable  aPhoneBook = new Hashtable();aPhoneBook.put("Zhang Lei", "010-84256712");aPhoneBook.put("Zhu Yongqin", "010-82957788");aPhoneBook.put("Liu Na", "010-80791234");System.out.println(aPhoneBook); // 顯示{ Liu Na=010-80791234, Zhu Yongqin=010-82957788, Zhang Lei=010-84256712 }
View Code

Object get(Object key) —— 返回關鍵字為key的值value,如果不存在,則返回null。如

Hashtable  aPhoneBook = new Hashtable();aPhoneBook.put("Zhang Lei", "010-84256712");aPhoneBook.put("Zhu Yongqin", "010-82957788");aPhoneBook.get("Zhang Lei");     // 返回"010-84256712"aPhoneBook.get("Zhu Yongqin");   // 返回"010-82957788"aPhoneBook.get("Liu Ling");      // 返回null
View Code

Object remove(Object key) —— 將鍵/值對從表中去除,并返回從表中去除的值,如果不存在,則返回null。如

Hashtable  aPhoneBook = new Hashtable();aPhoneBook.put("Zhu Yongqin", "010-82957788");aPhoneBook.put("Liu Na", "010-80791234");aPhoneBook.remove("Zhu Yongqin");aPhoneBook.remove("010-80791234");  // 不出錯,但返回nullSystem.out.println(aPhoneBook);  // 顯示{ Liu Na=010-80791234}
View Code
boolean isEmpty() —— 判斷哈希表是否為空boolean containsKey(Object key) —— 判斷給定的關鍵字是否在哈希表中boolean contains(Object value) —— 判斷給定的值是否在哈希表中boolean containsValue(Object value) —— 判斷給定的值是否在哈希表中void clear() —— 將哈希表清空Enumeration elements() —— 返回包含值的Enumeration對象Enumeration keys() —— 返回包含關鍵字的Enumeration對象

HashMap類與HashTable類很相似,只是HashTable類不允許有空的關鍵字,而HashMap類允許

Set接口以及實現類

Set是最簡單的集合,集合中的對象不按照特定的方式排序,并且沒有重復的對象。Set接口主要有兩個實現類:HashSet和TreeSet

Set集合里多個對象之間沒有明顯的順序,基本與Collection方法相同。只是行為不同(Set不允許包含重復元素)。Set集合不允許重復元素,是因為Set判斷兩個對象相同不是使用==運算符,而是根據equals方法。即兩個對象用equals方法比較返回true

public class TestSet {    public static void main(String[] args) {        Set<String> books = new HashSet<String>();        //添加一個字符串對象        books.add(new String("Struts2權威指南"));        //再次添加一個字符串對象,        //因為兩個字符串對象通過equals方法比較相等,所以添加失敗,返回false        boolean result = books.add(new String("Struts2權威指南"));        System.out.println(result);        //下面輸出看到集合只有一個元素        System.out.println(books);        }}

程序運行結果:

false[Struts2權威指南]

說明:程序中,book集合兩次添加的字符串對象明顯不是一個對象(程序通過new關鍵字來創建字符串對象),當使用==運算符判斷返回false,使用equals方法比較返回true,所以不能添加到Set集合中,最后只能輸出一個元素。Set接口中的知識,同時也適用于HashSet、TreeSet和EnumSet三個實現類。

HashSet類

HashSet按Hash算法來存儲集合的元素,因此具有很好的存取和查找性能。

HashSet的特點:

(1)HashSet不是同步的,多個線程訪問是需要通過代碼保證同步

(2)集合元素值可以使null。

HashSet集合判斷兩個元素相等的標準是兩個對象通過equals方法比較相等,并且兩個對象的hashCode()方法返回值也相等。

//類A的equals方法總是返回true,但沒有重寫其hashCode()方法  class A  {      public boolean equals(Object obj)      {          return true;      }  }  //類B的hashCode()方法總是返回1,但沒有重寫其equals()方法  class B  {      public int hashCode()      {          return 1;      }  }  //類C的hashCode()方法總是返回2,但沒有重寫其equals()方法  class C  {      public int hashCode()      {          return 2;      }      public boolean equals(Object obj)      {          return true;      }  }  public class TestHashSet  {      public static void main(String[] args)       {          HashSet<Object> books = new HashSet<Object>();          //分別向books集合中添加2個A對象,2個B對象,2個C對象          books.add(new A());          books.add(new A());          books.add(new B());          books.add(new B());          books.add(new C());          books.add(new C());          System.out.println(books);      }  } 

程序運行結果:

[B@1,B@1,C@2,A@b5dac4,A@9945ce]

TreeSet類

TreeSet是SortedSet接口的唯一實現,TreeSet可以確保集合元素處于排序狀態(元素是有序的)。

TreeSet提供的幾個額外方法:

Comparatorcomparttor():返回當前Set使用的Compara投入,或者返回null,表示以自然方式排序。

Objectfirst():返回集合中的第一個元素。

Objectlast():返回集合中的最后一個元素。

Objiectlower(Objecte):返回集合中位于指定元素之前的元素(即小于指定元素的最大元素,參考元素可以不是TreeSet的元素)。

Objecthigher(Objecte):返回集合中位于指定元素之后的元素(即大于指定元素的最小元素,參考元素可以不需要TreeSet的元素)。

SortedSetsubSet(fromElement,toElement):返回此Set的子集,范圍從fromElement(包含大于等于)到toElement(不包含小于)。

SortedSetheadSet(toElement):返回此Set的子集,由小于toElement的元素組成。

SortedSettailSet(fromElement):返回此Set的子集,由大于或等于fromElement的元素組成。

public class TestTreeSetCommon  {      public static void main(String[] args)       {          TreeSet<Integer> nums = new TreeSet<Integer>();          //向TreeSet中添加四個Integer對象          nums.add(5);          nums.add(2);          nums.add(10);          nums.add(-9);          //輸出集合元素,看到集合元素已經處于排序狀態          System.out.println(nums);          //輸出集合里的第一個元素          System.out.println(nums.first());          //輸出集合里的最后一個元素          System.out.println(nums.last());          //返回小于4的子集,不包含4          System.out.println(nums.headSet(4));          //返回大于5的子集,如果Set中包含5,子集中還包含5          System.out.println(nums.tailSet(5));          //返回大于等于-3,小于4的子集。          System.out.println(nums.subSet(-3 , 4));      }  } 

說明:由運行結果可以看出,TreeSet并不是根據元素的插入順序進行排序,而是根據元素實際值來進行排序。TreeSet采用紅黑樹的數據結構對元素進行排序,具體排序內容會在后續文章中說明。

參考資料

http://www.49028c.com/zhxxcq/archive/2012/03/14/2395511.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人av中文字幕| 久久精品视频导航| 日本成熟性欧美| 欧美不卡视频一区发布| 97婷婷涩涩精品一区| 欧美肥老妇视频| 成人在线视频福利| 欧美丰满片xxx777| 精品精品国产国产自在线| 91精品国产777在线观看| 国产精品一区二区三区久久| 国产精品久久久久7777婷婷| 久久精视频免费在线久久完整在线看| 亚洲黄色免费三级| 国产精品一区二区久久久久| 亚洲美女视频网| 国产精品一区二区女厕厕| 国语自产精品视频在免费| 国产一区二区三区在线视频| 久久国内精品一国内精品| 国产不卡精品视男人的天堂| 久久久亚洲国产| 中文字幕亚洲欧美| 久久久国产在线视频| 国产亚洲欧美日韩精品| 黑人精品xxx一区一二区| 亚洲系列中文字幕| 成人免费淫片视频软件| 日韩av影片在线观看| 亚洲aa在线观看| 国产精品激情自拍| 久久精品久久久久久国产 免费| 亚洲女成人图区| 国产午夜精品麻豆| 日韩麻豆第一页| 午夜欧美不卡精品aaaaa| 国产精品在线看| 亚洲国产天堂久久综合| 欧美尺度大的性做爰视频| 欧美日韩亚洲一区二| 日本久久久久久久| 国产精品一区专区欧美日韩| 亚洲视频在线观看网站| 日韩中文字幕视频在线| 日韩有码在线视频| 欧美国产日韩精品| 91欧美精品成人综合在线观看| 国产精品三级久久久久久电影| 亚洲影院在线看| 久久国产精品久久久久| 久久久久久久久中文字幕| 国产欧美精品一区二区三区-老狼| 国产成人短视频| 欧美一级黑人aaaaaaa做受| 色噜噜狠狠色综合网图区| 亚洲第一区中文99精品| 国产精品女视频| 裸体女人亚洲精品一区| xxx一区二区| 欧美日韩中文字幕日韩欧美| 欧美韩国理论所午夜片917电影| 热久久视久久精品18亚洲精品| 国产精品白嫩初高中害羞小美女| 岛国视频午夜一区免费在线观看| 91国产视频在线播放| 久久精品99国产精品酒店日本| 亚洲人成网站免费播放| 久久久久久91香蕉国产| 欧美黑人性视频| 国产美女91呻吟求| 亚洲精品国产精品国产自| 自拍视频国产精品| 欧美尺度大的性做爰视频| 欧美视频在线观看免费网址| 日韩欧美大尺度| 97精品视频在线| 亚洲欧美另类在线观看| 国内久久久精品| 亚洲天堂色网站| 久久乐国产精品| 亚洲欧洲日产国产网站| 国产亚洲精品美女久久久| 啊v视频在线一区二区三区| 精品中文字幕在线观看| 色午夜这里只有精品| 午夜免费在线观看精品视频| 午夜免费日韩视频| 国产日韩欧美在线看| 97在线视频观看| 日韩av在线直播| 欧美大片第1页| 国产精品视频公开费视频| 亚洲а∨天堂久久精品喷水| 亚洲黄色在线观看| 欧美精品一区二区三区国产精品| 69久久夜色精品国产7777| 精品亚洲男同gayvideo网站| 美日韩丰满少妇在线观看| 日韩经典一区二区三区| 中文字幕欧美日韩va免费视频| 在线免费看av不卡| 日韩中文字幕在线免费观看| 亚洲日本成人女熟在线观看| 亚洲天堂免费在线| 国产精品狼人色视频一区| 亚洲美女动态图120秒| 最新国产精品拍自在线播放| 欧美激情国产日韩精品一区18| 亚洲人成在线播放| 国产精品高精视频免费| 亚洲精品电影网在线观看| 亚洲天堂av在线播放| 成人亚洲欧美一区二区三区| 精品国产欧美一区二区三区成人| 按摩亚洲人久久| 久久的精品视频| 亚洲欧美日韩另类| 色樱桃影院亚洲精品影院| 国产成人小视频在线观看| 一本一本久久a久久精品综合小说| 奇门遁甲1982国语版免费观看高清| 亚洲人成伊人成综合网久久久| 日韩欧美精品网站| 亚洲国产精品嫩草影院久久| 久久亚洲电影天堂| 欧美午夜影院在线视频| 国产视频久久久| 欧美精品在线观看| 日韩欧美中文字幕在线观看| 亚洲日韩欧美视频| 欧美成人在线影院| 亚洲精品国产综合区久久久久久久| 精品国产精品自拍| 国产精品69精品一区二区三区| 国产精品久久久久久影视| 91黑丝在线观看| 青青久久av北条麻妃黑人| 97视频在线观看成人| 91精品国产99久久久久久| 亚洲精品456在线播放狼人| 亚洲欧美日韩一区二区三区在线| 91青草视频久久| 日韩大片免费观看视频播放| 中文字幕精品网| 亚洲欧洲一区二区三区久久| 国产精品成人av性教育| 亚洲国产高清自拍| 日韩中文理论片| 亚洲区一区二区| 91欧美精品成人综合在线观看| 少妇久久久久久| 亚洲精品国产suv| 亚洲码在线观看| 亚洲欧美日韩第一区| 国产精品电影久久久久电影网| 日本久久久久久久久久久| 国产精品自产拍在线观看中文| 欧美精品一区在线播放| 午夜精品理论片| 欧美人交a欧美精品| 色综合视频一区中文字幕| 国产精品老牛影院在线观看| 亚洲激情中文字幕| 97精品国产97久久久久久春色|