Java List接口的集合使用詳解
List接口繼承collection接口,此接口可以對(duì)列表中的每個(gè)元素精確的控制,可以根據(jù)元素的索引來(lái)獲取列表中的值,下面介紹常用的幾種,ArrayList,LinkedList。
ArrayList集合
ArrayList是一個(gè)動(dòng)態(tài)修改的數(shù)組,它沒(méi)有固定的大小,不需要自己分配空間,java本身已經(jīng)初始化容量為10的大小,可以直接添加刪除等一系列操作。
ArrayList構(gòu)造方法:
- ArrayList() ;構(gòu)造一個(gè)初始化容量為10的空列表。
- ArrayList(Collection c) ; 構(gòu)造一個(gè)包含指定 collection 的元素的列表,這些元素是按照該 collection 的迭代器返回它們的順序排列的。
- ArrayList(int initialCapacity) ;構(gòu)造一個(gè)指定初始容量的空列表。
常用方法:
| 方法名 | 說(shuō)明 |
|---|---|
| boolean add(E e) | 將指定元素添加到列表尾部 |
| void add(int index, E element) | 將指定元素添加到列表中指定位置 |
| void clear() | 刪除此列表中的所有元素 |
| Object clone() | 返回ArrayList副本 |
| boolean contains(Object o) | 如果列表中包含指定元素則返回true,否則false |
| E get(int index) | 返回列表中指定索引位置上的元素 |
| int indexOf(Object o) | 返回列表中首次出現(xiàn)的指定元素的索引,如果沒(méi)有則返回-1 |
| int lastIndexOf(Object o) | 返回此列表中最后一次出現(xiàn)的指定元素的索引,沒(méi)有則返回-1 |
| E remove(int index) | 刪除指定索引上的元素,并返回刪除值 |
| boolean remove(Object o) | 移除列表中首次出現(xiàn)的元素 |
| E set(int index, E element) | 將此列表中的索引位置的元素?fù)Q成指定的元素 |
| int size() | 返回此列表中的元素個(gè)數(shù) |
| Object[] toArray() | 將此列表所有元素?fù)Q成數(shù)組 |
| boolean isEmpty() | 如果此列表為空則返回true |
| List subList(int fromlndex, int tolndex) | 將此列表中從fromindex到toindex的元素組成新的集合返回 |
示例
import java.util.ArrayList;
public class dome2{
public static void main(String[] args){
ArrayList list=new ArrayList();
list.add("nihoa"); //添加字符串
list.add(12); //添加數(shù)字
list.add('a'); //添加字符
list.add("hello");
list.set(1,"java"); //將索引為1的換成字符串
System.out.println("索引為2的值是:"+list.get(2));
System.out.println("刪除索引為0的值是:"+list.remove(0));
System.out.println("列表中還有"+list.size()+"個(gè)元素");
System.out.println("判斷列表是不是為空: "+list.isEmpty());
for (Object object : list) { //循序打印
System.out.print(object+" ");
}
}
}
結(jié)果
索引為2的值是:a
刪除索引為0的值是:nihoa
列表中還有3個(gè)元素
判斷列表是不是為空: false
java a hello
例1:
創(chuàng)建一個(gè)商品類,指定商品的編號(hào),名稱,價(jià)格,封裝它們。
class Goods{
private int id; //編號(hào)
private String name; //名稱
private float price; //價(jià)格
public Goods() {
}
public Goods(int id, String name, float price) {
super();
this.id = id;
this.name = name;
this.price = price;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
@Override
public String toString() { //格式輸出
return "商品編號(hào): "+id+", 名稱: "+", 價(jià)格: "+",";
}
}
創(chuàng)建一個(gè)測(cè)試類,填寫商品的價(jià)格,編號(hào),名稱并保存到列表中,通過(guò)ArrayList類的方法修改和獲取值。
import java.util.ArrayList;
public class dome2{
public static void main(String[] args){
ArrayList<Goods> list=new ArrayList<Goods>();
list.add(new Goods(1,"保溫杯",22.0f));
list.add(new Goods(2,"洗發(fā)水",21.3f));
list.add(new Goods(3,"筆記本",5.0f));
Goods g=new Goods(5,"熱水壺",59.0f);
list.add(g);
list.add(new Goods(4,"菜刀",31.4f));
//1.遍歷所有商品
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i).toString());
}
//2.獲取指定商品的信息
System.out.println("查找編號(hào)為3,名稱為熱水壺,價(jià)格為59元的元素索引"+list.indexOf(g));
System.out.println("熱水壺的價(jià)格是 "+list.get(3).getPrice()+" 元");
System.out.println("洗發(fā)水的編號(hào)是 "+list.get(1).getId());
System.out.println("將菜刀的價(jià)格設(shè)為120元 ");
list.get(list.size()-1).setPrice(120.0f);
//3.遍歷所有商品
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i).toString());
}
}
}
結(jié)果
商品編號(hào): 1 名稱: 保溫杯 價(jià)格: 22.0
商品編號(hào): 2 名稱: 洗發(fā)水 價(jià)格: 21.3
商品編號(hào): 3 名稱: 筆記本 價(jià)格: 5.0
商品編號(hào): 5 名稱: 熱水壺 價(jià)格: 59.0
商品編號(hào): 4 名稱: 菜刀 價(jià)格: 31.4
查找編號(hào)為3,名稱為熱水壺,價(jià)格為59元的元素索引3
熱水壺的價(jià)格是 59.0 元
洗發(fā)水的編號(hào)是 2
將菜刀的價(jià)格設(shè)為120元
商品編號(hào): 1 名稱: 保溫杯 價(jià)格: 22.0
商品編號(hào): 2 名稱: 洗發(fā)水 價(jià)格: 21.3
商品編號(hào): 3 名稱: 筆記本 價(jià)格: 5.0
商品編號(hào): 5 名稱: 熱水壺 價(jià)格: 59.0
商品編號(hào): 4 名稱: 菜刀 價(jià)格: 120.0
Iterator迭代器遍歷:
Iterator接口是Collection接口的超級(jí)接口,通過(guò)Collection接口下的iterator方法返回iterator。
Iterator方法:
| 方法名 | 說(shuō)明 |
|---|---|
| boolean hasNext() | 如果有元素仍可以迭代,就返回true |
| E next() | 返回迭代的下一個(gè)元素 |
| void remove() | 移除迭代器返回的最后一個(gè)元素 |
public class dome2{
public static void main(String[] args){
ArrayList list=new ArrayList();
list.add("hello ");
list.add("world!,");
list.add("hello ");
list.add("java!");
Iterator it=list.iterator();
while(it.hasNext()) { //判斷是否還有下一個(gè)元素
System.out.print(it.next()); //輸出下一個(gè)元素
}
}
}
LinkedList類
LinkedList類采用鏈表結(jié)構(gòu)保存對(duì)象,鏈表采用節(jié)點(diǎn)之間的指向,上一個(gè)節(jié)點(diǎn)指向下一個(gè)節(jié)點(diǎn),并且可以在中間插入,不需要數(shù)組還需要重新排列,所以在頻繁的插入元素和刪除元素這方面,LinkedList類要比ArrayList類要快,效率更高。但在訪問(wèn)元素速度方面卻相對(duì)落后。
構(gòu)造方法
- LinkedList() ;構(gòu)造一個(gè)空列表
- LinkedList(Collection c) ;構(gòu)造一個(gè)包含指定 collection 中的元素的列表
常用方法:
| 方法名 | 說(shuō)明 |
|---|---|
| boolean add(E e) | 將指定元素添加到元素列表的結(jié)尾 |
| void add(int index, E element) | 在列表中指定的位置插入指定的元素 |
| void addFirst(E e) | 將指定元素插入到此列表的開頭 |
| void addLast(E e) | 將指定的元素添加到此列表的結(jié)尾 |
| boolean contains(Object o) | 如果列表中有指定元素返回true,否則false |
| E element() | 獲取但不移除此列表的第一個(gè)元素 |
| E get(int index) | 返回此列表中指定的元素 |
| E getFirst() | 返回此列表的第一個(gè)元素 |
| E getLast() | 返回此列表的最后一個(gè)元素 |
| int indexOf(Object o) | 返回此列表首次出現(xiàn)的指定元素的索引,沒(méi)有返回-1 |
| int lastIndexOf(Object o) | 返回此列表最后出現(xiàn)的指定元素的索引,沒(méi)有返回-1 |
| E set(int index, E element) | 將列表中指定位置的元素替換 |
| E removeFirst() | 移除并返回此列表中的第一個(gè)元素 |
| E removeLast() | 移除并返回此列表的最后一個(gè)元素 |
示例:
public class dome2{
public static void main(String[] args){
LinkedList list=new LinkedList();
list.add("電風(fēng)扇");
list.add("吹風(fēng)機(jī)");
list.add("香皂");
list.add("肥皂");
list.add("洗發(fā)水");
System.out.println("獲取的第一個(gè)商品是: "+list.getFirst());
System.out.println("獲取的最后一個(gè)商品是: "+list.getLast());
System.out.println("刪除的第一個(gè)元素是: "+list.removeFirst());
System.out.println("將索引為3的元素修改成: "+list.set(3,"牛角梳"));
for(int i=0;i<list.size();i++) {
System.out.print(list.get(i)+"\t");
}
}
}
LinkedList與ArrayList的區(qū)別:
1.ArrayList類是基于數(shù)組結(jié)構(gòu)實(shí)現(xiàn)的,訪問(wèn)速度優(yōu)先于LinkedList類。
2.LinkedList類占用的內(nèi)存空間比較大,但在批量插入,刪除,修改等時(shí)優(yōu)先于ArrayList類。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
maven將項(xiàng)目打包上傳到nexus私服的詳細(xì)教程
這篇文章主要介紹了maven將項(xiàng)目打包上傳到nexus私服,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-07-07
Jenkins配置前端自動(dòng)打包部署全過(guò)程(若依項(xiàng)目)
Jenkins作為一個(gè)開源的自動(dòng)化服務(wù)器,廣泛用于持續(xù)集成、持續(xù)部署(CI/CD)流程中,這篇文章主要給大家介紹了關(guān)于Jenkins配置前端自動(dòng)打包部署(若依項(xiàng)目)的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
Spring中@Import的各種用法以及ImportAware接口詳解
這篇文章主要介紹了Spring中@Import的各種用法以及ImportAware接口詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10

