java集合框架詳解
1.java集合框架概述
java SE包含了由一組類和接口組成的java集合框架(java Collection Framework,簡稱JCF),其主要功能是用來將存儲(chǔ)的數(shù)據(jù)以某種結(jié)構(gòu)組織,并以特定的方式來訪問這些數(shù)據(jù),其目標(biāo)是提供一個(gè)處理對(duì)象集合的通用框架,減少程序員處理不同對(duì)象集合時(shí)的編碼量。
集合類中的一些區(qū)別,除了它們是否支持重復(fù)元素操作外,還包括元素是否有順序,以及是否允許添加null元素。java集合框架中根據(jù)這三個(gè)區(qū)別,將對(duì)象的存儲(chǔ)方式分為三種類型,分別是:
- Set(集):對(duì)象容器中的對(duì)象沒有順序,且不能重復(fù)。
- List(列表):對(duì)象容器中的對(duì)象按照索引順序排序,而且可以有重復(fù)的對(duì)象。
- Map(映射):對(duì)象容器中的元素包含一對(duì)“鍵對(duì)象-值對(duì)象”映射,其中鍵對(duì)象不能重復(fù),值對(duì)象可以重復(fù)。
為支持對(duì)象的排序和遍歷訪問操作,java集合框架中又提供了幾個(gè)接口:
- 接口SortedSet為Set類型容器提供拍戲功能。
- 接口SortedMap為Map類型容器提供對(duì)鍵對(duì)象的排序。
- 接口Comparable和comparator用來實(shí)現(xiàn)集合中對(duì)象的排序。
2.Collection接口和Iterator接口
Collection接口中定義了Collection對(duì)象共有的一些基本方法
| 方法 | 描述 |
| int size() | 返回當(dāng)前集合中包含的元素個(gè)數(shù) |
| isEmpyt() | 判斷集合中是否含有元素 |
| boolean contains(Objact o) | 判斷集合中是否含有某一指定元素 |
| add(Objact o) | 向集合中添加某一個(gè)元素 |
| remove(Objact o) | 從集合中刪除某一元素 |
| Iterator iterator() | 返回一個(gè)遍歷器,用來訪問集合中的各個(gè)元素 |
Iterator接口是一種用于遍歷集合的接口。
| 方法 | 描述 |
| hasNext() | 如果集合中還有更多元素,該方法返回true |
| next() | 返回集合中的下一個(gè)元素 |
| remove() | 刪除Iterator返回的最后一個(gè)元素 |
1.List接口
List接口繼承自Collection接口,它有如下特點(diǎn):
- List中的元素是有順序的。
- List通常允許重復(fù)元素。
- List的實(shí)現(xiàn)類通常支持null元素。
- 可以通過索引訪問List對(duì)象容器中的元素。
List接口最常用的實(shí)現(xiàn)類是ArrayList類和LinkedList類。
1).ArrayList
程序?qū)嵗?nbsp;
package lei;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(1);
list.add("zhangsan");
list.add(false);
list.add('a');
list.add(0, "lisi");
list.add(1);
list.remove(1);
list.remove(2);
list.set(0, "wangwu");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
Object類定義的equals()方法只有在傳遞給該方法的對(duì)象與調(diào)用該方法的對(duì)象是同一對(duì)象的時(shí)候,才會(huì)返回true。可以通過重寫equals()方法來把具有相同狀態(tài)的兩個(gè)對(duì)象被看做是同一對(duì)象。
2).LinkedList
| 方法 | 描述 |
| void addFirst | 在鏈表開頭添加一個(gè)對(duì)象 |
| void addLast | 在鏈表末尾添加一個(gè)對(duì)象 |
| getFirst() | 返回鏈表中的第一個(gè)元素 |
| getLast() | 返回鏈表中的最后一個(gè)元素 |
| removeFirst() | 刪除鏈表中的第一個(gè)元素 |
| removeLast() | 刪除鏈表中的最后一個(gè)元素 |
程序?qū)嵗?/p>
package lei;
import java.util.LinkedList;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
LinkedList l=new LinkedList<>();
l.add("zhangsan");
l.add("lisi");
l.addFirst(1);
l.addLast(4);
System.out.println(l.getFirst());
System.out.println(l.getLast());
l.removeFirst();
l.removeLast();
for (int i = 0; i < l.size(); i++) {
System.out.println(l.get(i));
}
}
}
LinkedList與ArrayList的選擇
如果列表需要快速存取,但不經(jīng)常進(jìn)行元素的插入和刪除操作,那么選擇ArrayList會(huì)好一些;如果需要對(duì);列表進(jìn)行頻繁的插入和刪除操作,那么就應(yīng)該選擇LinkedList。
2.set接口
set接口繼承自Collectiion接口,同時(shí)也繼承了Collection接口的全部方法。set接口有以下特點(diǎn):
- Set類型容器中不能包含重復(fù)元素。當(dāng)加入一個(gè)元素到容器中時(shí),要比較元素的內(nèi)容是否存在重復(fù)的,所以加入Set類型對(duì)象容器的對(duì)象必須重寫equals()方法。
- 元素能能有順序,也可能沒有順序。
- 因?yàn)樵乜赡軟]有順序,所以不能基于下標(biāo)訪問Set中費(fèi)元素。
實(shí)現(xiàn)Set接口最常用的是HashSet類和TreeSet類。
1).Hashset
Hashset類是基于哈希算法的Set接口實(shí)現(xiàn),它主要有如下幾個(gè)特點(diǎn):
- 當(dāng)遍歷Hashset時(shí),其中的元素是沒有順序的。
- Hashset中不允許出現(xiàn)重復(fù)元素。這里的重復(fù)元素是指有相同的哈希碼,并且用equals()方法進(jìn)行比較時(shí),返回true的兩個(gè)對(duì)象。
- 允許包含null元素。
如果我們編寫的類重新定義了equals方法,那么這個(gè)類也必須重新定義hashCode()方法,并且保證當(dāng)兩個(gè)對(duì)象用equals方法比較結(jié)果為true時(shí),這兩個(gè)對(duì)象的hashCode()方法的返回值相等。
程序?qū)嵗?/p>
package lei;
import java.util.HashSet;
import java.util.Set;
public class Test4 {
public static void main(String[] args) {
Set<String> set=new HashSet<String>();
set.add("zhangsan");
set.add("lisi");
for(String s:set){
System.out.println(s);
}
}
}
2).TreeSet
TreeSet類不僅實(shí)現(xiàn)類Set接口,還實(shí)現(xiàn)了SortedSet接口,從而保證集合中的對(duì)象按照一定的順序排序。當(dāng)向TreeSet集合中添加一個(gè)對(duì)象時(shí),會(huì)把它插入到有序的對(duì)象序列中,但是這種排序并不是按照對(duì)象添加的順序排序,而是按照一定的算法來排序。
TreeSet使用元素的自然順序?qū)υ剡M(jìn)行排序,或者根據(jù)創(chuàng)建Set時(shí)提供的Comparator進(jìn)行排序。TreeSet支持自然排序和自定義排序兩種排序方式。
3.Map接口
Map(映射)接口是java集合框架中不同于Collection接口的另一個(gè)重要接口,它對(duì)應(yīng)的是在一種從鍵(Key)到值(Value)的對(duì)應(yīng)關(guān)系的集合。Map類型的對(duì)象容器里面保存著兩組對(duì)象,一組對(duì)象用于保存Map里的Key,另外一組用于保存Value。Key和Value可以升級(jí)任何引用類型的數(shù)據(jù)。Key不能重復(fù),但是Value可以重復(fù)。
1).HashMap
HashMap是基于哈希算法的Map接口的實(shí)現(xiàn)。HashMap將它的鍵保存在哈希表中進(jìn)行維護(hù),鍵是唯一的。但是,HashMap并不保證鍵以特定順序排列,特別是不保證順序永久不變。
HashMap類實(shí)現(xiàn)了Map接口,從而具有Map接口的所有方法。
package day1228;
import java.util.*;
public class HashMapDemo {
public static void main(String[] args) {
// 創(chuàng)建一個(gè)新的HashMap
Map<String, String> map = new HashMap<String, String>();
map.put("a1", "xiao");
map.put("b2", "xiaol");
map.put("a4", "xiaosd");
map.put("b1", "12a");
map.put("a3", "1");
// 使用iterator遍歷 鍵和值
System.out.println("之前的Map值是:");
Set<String> keys = map.keySet();
for (Iterator<String> i = keys.iterator(); i.hasNext();) {
String key = i.next();
String value = map.get(key);
System.out.println(key + "=" + value);
}
// 刪除鍵為"a4"的值
System.out.println("\n刪除鍵值為a4的元素");
map.remove("a4");
// //使用iterator遍歷 鍵和值
System.out.println("\n之后的Map值:");
keys = map.keySet();
for (Iterator<String> i = keys.iterator(); i.hasNext();) {
String key = i.next();
String value = map.get(key);
System.out.println(key + "=" + value);
}
}
}
2).TreeMap
TreeMap類是基于紅黑樹算法的Map接口實(shí)現(xiàn)。TreeMap中鍵的存放方式與TreeSet相似,它將鍵存放在樹中,鍵的順序按照自然順序或者自定義順序兩種方式排列。
程序?qū)嵗?/p>
package day1228;
import java.util.*;
public class TreeMapDemo {
public static void main(String[] args) {
//創(chuàng)建一個(gè)新的TreeMap
Map<Integer, String> map = new TreeMap<Integer, String>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
map.put(4, "four");
map.put(5, "five");
//使用iterator顯示鍵和值
System.out.println("之前的map值為:");
Set<Integer> keys=map.keySet();
for(Object key:keys){
String value=map.get(key);
System.out.println(key+"="+value);
}
//刪除鍵為3的值
System.out.println("\n刪除鍵值為3的元素");
map.remove(3);
//使用iterator顯示鍵和值
System.out.println("\n之后的值Map為:");
for(Object key:keys){
String value=map.get(key);
System.out.println(key+"="+value);
}
}
}
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
- JAVA集合框架工具類自定義Collections集合方法
- 簡單了解java集合框架LinkedList使用方法
- Java集合框架迭代器Iterator實(shí)現(xiàn)原理解析
- Java集合框架Collections原理及用法實(shí)例
- JAVA集合框架Map特性及實(shí)例解析
- 通過實(shí)例學(xué)習(xí)Java集合框架HashSet
- Java集合框架源碼分析之LinkedHashMap詳解
- Java集合框架LinkedList詳解及實(shí)例
- Java集合框架中迭代器Iterator解析
- Java集合框架之Collection接口詳解
- 一道Java集合框架題 多種解題思路
- Java基礎(chǔ)詳解之集合框架工具Collections
相關(guān)文章
java如何將一個(gè)float型數(shù)的整數(shù)部分和小數(shù)分別輸出顯示
這篇文章主要介紹了java如何將一個(gè)float型數(shù)的整數(shù)部分和小數(shù)分別輸出顯示,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
ElasticSearch不停機(jī)重建索引延伸思考及優(yōu)化詳解
這篇文章主要為大家介紹了ElasticSearch不停機(jī)重建索引延伸思考及優(yōu)化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Spring boot + mybatis + Vue.js 
這篇文章主要介紹了Spring boot + mybatis + Vue.js + ElementUI 實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例代碼(二),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05
1秒實(shí)現(xiàn)Springboot 圖片添加水印功能
這篇文章主要介紹了1秒實(shí)現(xiàn)Springboot 圖片添加水印功能,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12
java中的instanceof關(guān)鍵字詳細(xì)解讀
這篇文章主要介紹了java中的instanceof關(guān)鍵字詳細(xì)解讀,instanceof 是 Java 的保留關(guān)鍵字,它的作用是測(cè)試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回 boolean 的數(shù)據(jù)類型,需要的朋友可以參考下2024-01-01

