List集合的特點(diǎn):存儲(chǔ)的元素是有序/可重復(fù)的。
List集合為每個(gè)元素指定了一個(gè)索引值, 主要增加了針對(duì)索引值的操作。
| void | add(int index, E element) 在當(dāng)前集合的index位置插入元素element |
| boolean | addAll(int index, Collection<? extends E> c) 把集合c中的所有元素插到當(dāng)前集合的index位置 |
| E | get(int index) 返回index位置的元素 |
| int | indexOf(Object o) 返回元素o在集合中第一次出現(xiàn)的位置 |
| int | lastIndexOf(Object o) 返回元素o在集合中最后一次出現(xiàn)的位置 |
| ListIterator<E> | listIterator() 返回List迭代器 |
| E | remove(int index) 刪除指定位置的元素 |
| E | set(int index, E element) 修改指定位置的元素 |
| default void | sort(Comparator<? super E> c) 排序 |
| List<E> | subList(int fromIndex, int toIndex) 返回[frominde, toIndex)范圍內(nèi)的子列表 |
package com.wkcto.chapter05.list;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 演示List的基本操作
* @author 蛙課網(wǎng)
*
*/
public class Test01 {
public static void main(String[] args) {
//1)創(chuàng)建List集合, List接口引用需要賦值實(shí)現(xiàn)類對(duì)象
List<String> list = new ArrayList<>();
//2)添加元素
list.add("gg");
list.add("jj");
list.add("dd");
list.add("mm");
list.add("jj");
//3)直接打印, List存儲(chǔ)元素的順序就是添加的順序, 可以存儲(chǔ)重復(fù)的數(shù)據(jù)
System.out.println( list ); //[gg, jj, dd, mm, jj]
//4) 判斷
System.out.println( list.size() );
System.out.println( list.isEmpty());
System.out.println( list.contains("jj"));
//5) 刪除
list.remove("gg"); //刪除第一個(gè)匹配的元素
System.out.println( list ); //[jj, dd, mm, jj]
//6) 遍歷
for (String string : list) {
System.out.print( string + "\t");
}
System.out.println( );
//7)迭代遍歷
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String string = (String) iterator.next();
System.out.print(string + "\t");
}
System.out.println( );
//8)迭代刪除
iterator = list.iterator(); //重新獲得迭代器對(duì)象
while (iterator.hasNext()) {
String string = (String) iterator.next();
if ("jj".equals(string)) {
iterator.remove();
}
}
System.out.println( list );
}
}
package com.wkcto.chapter05.list;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/**
* 演示List集合新增的操作
* @author 蛙課網(wǎng)
*
*/
public class Test02 {
public static void main(String[] args) {
// 1)創(chuàng)建List集合,
List<String> list = new ArrayList<>();
// 2)添加元素
list.add("gg");
list.add("jj");
list.add("dd");
list.add("mm");
list.add("jj");
// 3)直接打印,
System.out.println(list); //[gg, jj, dd, mm, jj]
//4) 在指定索引值的位置添加
list.add(0, "MM");
list.add(list.size(), "DD");
System.out.println(list); //[MM, gg, jj, dd, mm, jj, DD]
//遇到索引值的位置,需要注意索引值不能越界
// list.add(20 , "xxx"); //java.lang.IndexOutOfBoundsException
//5)刪除指定位置的元素
list.remove(0);
System.out.println( list ); //[gg, jj, dd, mm, jj, DD]
list.remove(list.size()-1);
System.out.println( list ); //[gg, jj, dd, mm, jj]
//6)返回指定位置的元素
System.out.println( list.get(0));
System.out.println( list.get(list.size()-1));
//7)修改指定位置的元素
list.set(0, "JJ");
System.out.println( list ); //[JJ, jj, dd, mm, jj]
//8)返回指定范圍的子列表, 注意subList并沒(méi)有生成新的List列表 ,而是返回原有List列表的一個(gè)視圖
List<String> sublist = list.subList(0, 3);
System.out.println( sublist ); //[JJ, jj, dd]
//修改sublist子列表
sublist.add("DD");
sublist.set(0, "jj");
System.out.println( sublist ); //[jj, jj, dd, DD]
//對(duì)subList進(jìn)行的修改實(shí)際上就是對(duì)list進(jìn)行修改
System.out.println( list ); //[jj, jj, dd, DD, mm, jj]
//9) 返回指定元素在列表中第一次出現(xiàn)的位置
System.out.println( list.indexOf("jj"));
System.out.println( list.lastIndexOf("jj"));
//10) ListIterator迭代
// ListIterator繼承了Iterator
ListIterator<String> listIterator = list.listIterator();
while (listIterator.hasNext()) {
String string = (String) listIterator.next();
System.out.print( string + "\t");
}
System.out.println();
//經(jīng)過(guò)上個(gè)while循環(huán)后,listIterator游標(biāo)指向最后,ListIterator還可以向前迭代
while( listIterator.hasPrevious() ){
String str = listIterator.previous();
System.out.print( str + "\t");
}
System.out.println();
//ListIterator不僅可以刪除元素,還可以修改/添加元素
while (listIterator.hasNext()) {
String string = (String) listIterator.next();
if (string.equals("mm")) {
listIterator.remove(); //刪除
}else if ( "jj".equals(string)) {
listIterator.add("Dd");
}else if ("dd".equals(string)) {
listIterator.set("DD");
}
}
System.out.println( list ); //[jj,Dd , jj, Dd, DD, DD, jj, Dd]
}
}
package com.wkcto.chapter05.list;
import java.util.ArrayList;
import java.util.List;
/**
* List集合存儲(chǔ)自定義類型數(shù)據(jù)
* 注意List集合的remove(Object)/contains(Object)方法會(huì)調(diào)用對(duì)象的equals()方法, 如果是自定義需要重寫equals()方法
* @author 蛙課網(wǎng)
*
*/
public class Test03 {
public static void main(String[] args) {
//創(chuàng)建List集合,存儲(chǔ)Person對(duì)象
List<Person> list = new ArrayList<>();
//添加元素
list.add(new Person("lisi", 18));
list.add(new Person("feifei", 28));
list.add(new Person("zhang", 33));
list.add(new Person("yong", 35));
System.out.println( list );
Person feifei = new Person("feifei", 28);
System.out.println( list.contains(feifei));
list.remove(feifei);
System.out.println( list );
}
}
package com.wkcto.chapter05.list;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/**
* List集合排序
* sort(Comparator)
* @author 蛙課網(wǎng)
*
*/
public class Test04 {
public static void main(String[] args) {
//創(chuàng)建List集合,存儲(chǔ)Person對(duì)象
List<Person> list = new ArrayList<>();
//添加元素
list.add(new Person("lisi", 18));
list.add(new Person("feifei", 28));
list.add(new Person("zhang", 33));
list.add(new Person("yong", 35));
//打印輸出的順序就是添加的順序
System.out.println( list );
//[Person [name=lisi, age=18], Person [name=feifei, age=28], Person [name=zhang, age=33], Person [name=yong, age=35]]
//對(duì)List集合中的元素排序, 想要對(duì)List集合中的Person對(duì)象按照年齡降序排序
//調(diào)用方法時(shí),傳遞Comparator的匿名內(nèi)部類對(duì)象, 通過(guò)泛型指定比較對(duì)象的數(shù)據(jù)類型
list.sort(new Comparator<Person>() {
//在匿名內(nèi)部類重寫接口的抽象方法
@Override
public int compare(Person o1, Person o2) {
//在compare方法中指定比較規(guī)則 , 按年齡降序
return o2.age - o1.age; //如果o1的年齡大返回負(fù)數(shù), o2年齡大返回正數(shù)
// return o1.age - o2.age; //如果o1的年齡大返回正數(shù), o2年齡大返回負(fù)數(shù)
}
});
System.out.println( list );
//對(duì)List排序, 根據(jù)姓名升序
list.sort(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
// return o1.name.compareTo(o2.name); //姓名升序
return o2.name.compareTo(o1.name); //姓名降序
}
});
System.out.println(list);
}
}