提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、 List概述
1.1概念
List是一種常用的集合類型,它可以存儲任意類型的對象,也可以結(jié)合泛型來存儲具體的類型對象,本質(zhì)上就是一個容器。
1.2list體系結(jié)構圖
1.3 通用方法
ArrayList和LinkedList通用方法:
以上方法通用且常用的方法其他方法可參考相關的文檔進行查詢即可,
測試代碼
以List的實現(xiàn)類ArrayList:
public static void main(String[] args) {
// TODO Auto-generated method stub
// 創(chuàng)建集合
List list = new ArrayList<>();
// 添加元素
list.add("hello");
list.add("world");
list.add("java");
// public boolean remove(Object o):刪除指定的元素,返回刪除是否成功
System.out.println(list.remove("world"));//true
System.out.println(list.remove("javaee"));//false
// public E remove(int index):刪除指定索引處的元素,返回被刪除的元素
System.out.println(list.remove(1));//world
// IndexOutOfBoundsException
System.out.println(list.remove(3));
// public E set(int index,E element):修改指定索引處的元素,返回被修改的元素
System.out.println(list.set(1,"javaee"));//world
// IndexOutOfBoundsException
System.out.println(list.set(3,"javaee"));
// public E get(int index):返回指定索引處的元素
System.out.println(list.get(0));//hello
System.out.println(list.get(1));//world
System.out.println(list.get(2));//java
// IndexOutOfBoundsException
System.out.println(list.get(3));
// public int size():返回集合中的元素的個數(shù)
System.out.println(list.size());//3
// 輸出集合
System.out.println("list:" + list);//list:[hello, world, java]
// boolean contains(Object o) 如果此列表包含指定的元素,則返回 true
System.out.println(list.contains("world"));//true
// boolean addAll(int index, Collection c)
//將指定集合中的所有元素插入到此列表中,從指定的位置開始
List list2 = new ArrayList<>();
//addall前l(fā)ist2
System.out.println(list2);// []
System.out.println(list2.addAll(0, list));// true
//addall后list2
System.out.println(list2);// [hello, world, java]
}
二、List的特點
(1)有序性:List中的元素是按照添加順序進行存放的。因為有序,所以有下標,下標從0開始
(2)可重復性: List中可以存儲重復的元素
三、遍歷方式
利用三種方式進遍歷list
foreach
List list = new ArrayList<>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
for (Object object : list) {
System.out.println(object);
}
for循環(huán)
根據(jù)下標進行遍歷、
//創(chuàng)建集合
List list = new ArrayList<>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
迭代器
//創(chuàng)建集合
List list = new ArrayList<>();
//添加元素
list.add("hello");
list.add("world");
list.add("java");
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
四、ArrayList
ArrayList概述
概念
ArrayList是Java中的一個類,實現(xiàn)了List接口,底層使用數(shù)組來存儲元素。與數(shù)組相比,它具有更靈活的大小和動態(tài)的增加和刪除元素。
數(shù)據(jù)結(jié)構
ArrayList的數(shù)據(jù)結(jié)構本質(zhì)上就是數(shù)組
。區(qū)別在于,數(shù)組是一種靜態(tài)的數(shù)據(jù)結(jié)構
,需要在創(chuàng)建數(shù)組時就指定它的長度,并且創(chuàng)建后長度無法改變。而ArrayList是一種動態(tài)的數(shù)據(jù)結(jié)構,它可以自動進行擴容
。
ArrayList的底層數(shù)據(jù)結(jié)構:
ArrayList的特點
除了具備List有序性、可重復性特點外,ArrayList還具備以下的特點:
1.自動擴容
當向ArrayList中加入的元素超過了其默認的長度時(由于ArrayList是數(shù)組的封裝類,在創(chuàng)建ArrayList時不用給定長度,其默認長度為10),它會自動擴容以增加存儲容量
2.隨機訪問
隨機訪問是指可以直接訪問元素,而不需要從頭部或者尾部遍歷整個列表。由于ArrayList底層是用數(shù)組實現(xiàn)的,因此可以通過索引來快速訪問元素。
3.慢速插入/刪除:
相比于鏈表(如LinkedList),ArrayList在中間插入或刪除元素較慢,因為需要移動元素。
4.高效的遍歷
由于ArrayList底層采用了數(shù)組來存儲元素,所以對于ArrayList的遍歷操作比較高效。
常用方法:
ArrayList去重
字符串去重
使用contains方法
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
System.out.println("目前集合容器中的元素:"+list);//目前集合容器中的元素:[a, b, c]
if (!list.contains("b")){//如果不包含“b”
list.add("b");//才增加
}
System.out.println("目前集合容器中的元素:"+list);//目前集合容器中的元素:[a, b, c]
}
}
對象去重
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Student("zs",16));
list.add(new Student("ls",17));
list.add(new Student("ww",18));
System.out.println("目前集合容器中的元素:"+list);
//目前集合容器中的元素:[com.xqx.demo.Student@33909752, com.xqx.demo.Student@55f96302, com.xqx.demo.Student@3d4eac69]
if (!list.contains(new Student("ls",17))){//不包含才新增
list.add(new Student("ls",17));
}
System.out.println("目前集合容器中的元素:"+list);
//目前集合容器中的元素:[com.xqx.demo.Student@33909752, com.xqx.demo.Student@55f96302, com.xqx.demo.Student@3d4eac69, com.xqx.demo.Student@42a57993]
if (list.contains(new Student("ls",17))){//包含才移除
list.remove(new Student("ls",17));
}
System.out.println("目前集合容器中的元素:"+list);
//目前集合容器中的元素:[com.xqx.demo.Student@33909752, com.xqx.demo.Student@55f96302, com.xqx.demo.Student@3d4eac69, com.xqx.demo.Student@42a57993]
}
}
class Student{
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
五、LinkedList
LinkedList概述
概念
LinkedList也是Java中的一個常用的集合類,實現(xiàn)了List接口,底層使用的是雙向鏈表數(shù)據(jù)結(jié)構。
與ArrayList不同,LinkedList在內(nèi)部存儲元素時,不是使用連續(xù)的內(nèi)存空間,而是使用一個鏈表來存儲元素。
數(shù)據(jù)結(jié)構
LinkedList底層采用的是雙向鏈表(doubly linked list) 數(shù)據(jù)結(jié)構
。鏈表中的每個節(jié)點(結(jié)點)都由兩個部分組成,一部分是存儲數(shù)據(jù)元素的值域,另一部分是指向前一個節(jié)點和后一個節(jié)點的指針(引用)。對于雙向鏈表來說,除了一個指向前一個節(jié)點的指針外,還有一個指向后一個節(jié)點的指針
LinkedList的特點
隨機訪問性能較差:
LinkedList的隨機訪問性能較差,因為在鏈表中要從頭開始遍歷鏈表,直到找到目標元素。所以如果在代碼中需要頻繁進行隨機訪問元素的操作,LinkedList可能不是一個最佳的選擇。
添加/刪除操作快:
由于LinkedList底層使用雙向鏈表,因此它的添加和刪除操作非常快,因為只需要更改指針的指向即可,不需要像ArrayList一樣重新分配數(shù)組空間,而且LinkedList還支持在指定位置插入和刪除元素。
需要額外空間:
鏈表中每個節(jié)點都需要額外存儲到前一個和后一個節(jié)點的指針,因此比數(shù)組等其他數(shù)據(jù)結(jié)構需要更多的內(nèi)存空間。
適用于隊列和雙端隊列:
LinkedList還可以支持隊列和雙端隊列的功能,如在鏈表頭部或尾部添加或刪除元素,實現(xiàn)隊列和雙端隊列的常見操作。
雙端隊列(Deque,即Double Ended Queue的縮寫)是一種允許在隊列的兩端進行插入和刪除操作的數(shù)據(jù)結(jié)構。雙端隊列可以從隊列的頭部和尾部添加和移除元素
常用方法
ArrayList和LinkedList的比較
1、由于ArrayList的數(shù)據(jù)結(jié)構為數(shù)組,所以查詢修改快,新增刪除慢;而LinkedList的數(shù)據(jù)結(jié)構為鏈表
結(jié)構,所以查詢修改慢,新增刪除快
2、ArrayList是基于數(shù)組實現(xiàn)的動態(tài)數(shù)組,在內(nèi)存中有連續(xù)的空間,可以通過下標訪問元素,由于數(shù)組需要提前分配一定大小的空間,因此當元素數(shù)量增多之后,可能會導致數(shù)組空間不足需要重新分配數(shù)組,這種情況下可能會出現(xiàn)內(nèi)存空間浪費;相比之下,LinkedList是基于鏈表實現(xiàn)的,每個元素都有一個引用指向下一個元素,不需要提前分配空間,因此能夠更加靈活地插入和刪除元素。然而,鏈表在內(nèi)存中是不連續(xù)的,每個元素的引用占用額外的內(nèi)存空間。由于鏈表中每個元素都需要有一個指向下一個元素的引用,因此在存儲同樣數(shù)量的元素時,LinkedList通常會占用比ArrayList更大的內(nèi)存空間。文章來源:http://www.zghlxwxcb.cn/news/detail-821340.html
好啦,今天的分享就到此為止!希望你看完本篇文章有所收獲,祝你變得更強??!!
文章來源地址http://www.zghlxwxcb.cn/news/detail-821340.html
到了這里,關于Javat集合之Lis---(ArrayList和LinkedList)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!