Java List集合深入学习,javalist深入学习
Java List集合深入学习,javalist深入学习
Java List是一个有序集合。Java List是扩展Collection接口的接口。Java List提供对可插入元素的位置的控制。您可以按索引访问元素,也可以搜索列表中的元素。
目录
Java列表
Java列表类图
Java列表方法
要列出的Java数组
Java List to Array
Java列表排序
Java列表常见操作
Java List迭代器
Java List
关于Java List的一些重要观点是;
- Java List接口是Java Collections Framework的成员。
- List允许您添加重复元素。
- List允许您拥有'null'元素。
- List接口在Java 8中有许多默认方法,例如replaceAll,sort和spliterator。
- 列表索引从0开始,就像数组一样。
- List支持泛型,我们应尽可能使用它。将Generics与List一起使用将在运行时避免ClassCastException。
Java列表类图
Java List接口扩展了Collection接口。集合界面externs Iterable接口。一些最常用的List实现类是ArrayList,LinkedList,Vector,Stack,CopyOnWriteArrayList。AbstractList提供了List接口的骨干实现,以减少实现List的工作量。
Java列表方法
一些有用的Java List方法是;
- int size():获取列表中元素的数量。
- boolean isEmpty():检查列表是否为空。
- boolean contains(Object o):如果此列表包含指定的元素,则返回true。
- Iterator <E> iterator():以适当的顺序返回此列表中元素的迭代器。
- Object [] toArray():以适当的顺序返回包含此列表中所有元素的数组
- boolean add(E e):将指定的元素追加到此列表的末尾。
- boolean remove(Object o):从此列表中删除指定元素的第一个匹配项。
- boolean retainAll(Collection <?> c):仅保留此列表中包含在指定集合中的元素。
- void clear():从列表中删除所有元素。
- E get(int index):返回列表中指定位置的元素。
- E set(int index,E element):用指定的元素替换列表中指定位置的元素。
- ListIterator <E> listIterator():返回列表中元素的列表迭代器。
- List <E> subList(int fromIndex,int toIndex):返回指定fromIndex(包含)和toIndex(不包括)之间的此列表部分的视图。返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然。
在Java 8中添加到List的一些默认方法是;
- default void replaceAll(UnaryOperator <E>运算符):将此列表的每个元素替换为将运算符应用于该元素的结果。
- default void sort(Comparator <super E> c):根据指定的Comparator引发的顺序对此列表进行排序。
- default Spliterator <E> spliterator():在此列表中的元素上创建Spliterator。
要列出的Java数组
我们可以使用Arrays类将数组视图作为列表。但是我们将无法对列表进行任何结构修改,它将抛出java.lang.UnsupportedOperationException。所以最好的方法是使用for循环来迭代数组来创建列表。下面是一个简单的例子,展示了如何正确地将java数组转换为列表。
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayToList {
public static void main(String[] args) {
String[] vowels = {"a","e","i","o","u"};
List<String> vowelsList = Arrays.asList(vowels);
System.out.println(vowelsList);
/**
* List is backed by array, we can't do structural modification
* Both of the below statements will throw java.lang.UnsupportedOperationException
*/
//vowelsList.remove("e");
//vowelsList.clear();
//using for loop to copy elements from array to list, safe for modification of list
List<String> myList = new ArrayList<>();
for(String s : vowels){
myList.add(s);
}
System.out.println(myList);
myList.clear();
}
}
根据您的项目要求选择上述任何一种方法。
Java List to Array
一个简单的示例,显示将列表转换为数组的正确方法。
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListToArray {
public static void main(String[] args) {
List<String> letters = new ArrayList<String>();
// add example
letters.add("A");
letters.add("B");
letters.add("C");
//convert list to array
String[] strArray = new String[letters.size()];
strArray = letters.toArray(strArray);
System.out.println(Arrays.toString(strArray)); //will print "[A, B, C]"
}
}
Java列表排序
有两种方法可以对列表进行排序。我们可以使用Collections类进行自然排序,或者我们可以使用List sort()方法并使用我们自己的Comparator进行排序。下面是java列表排序的一个简单示例。
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class ListSortExample {
public static void main(String[] args) {
List<Integer> ints = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 10; i++) ints.add(random.nextInt(1000));
//natural sorting using Collections class
Collections.sort(ints);
System.out.println("Natural Sorting: "+ints);
//My custom sorting, reverse order
ints.sort((o1,o2) -> {return (o2-o1);});
System.out.println("Reverse Sorting: "+ints);
}
}
下面给出了一个示例输出。由于我使用Random生成列表元素,因此每次都会有所不同。
Natural Sorting: [119, 273, 388, 450, 519, 672, 687, 801, 812, 939]
Reverse Sorting: [939, 812, 801, 687, 672, 519, 450, 388, 273, 119]
Java列表常见操作
在java列表上执行的最常见操作是添加,删除,设置,清除,大小等。下面是一个简单的java列表示例,显示了常用的方法用法。
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListExample {
public static void main(String args[]) {
List<String> vowels= new ArrayList<String>();
//add example
vowels.add("A");
vowels.add("I");
//let's insert E between A and I
vowels.add(1,"E");
System.out.println(vowels);
List<String> list = new ArrayList<String>();
list.add("O");list.add("U");
//appending list elements to letters
vowels.addAll(list);
System.out.println(vowels);
//clear example to empty the list
list.clear();
//size example
System.out.println("letters list size = "+vowels.size());
//set example
vowels.set(2, "E");
System.out.println(vowels);
//subList example
vowels.clear();vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
list = vowels.subList(0, 2);
System.out.println("letters = "+vowels+", list = "+list);
vowels.set(0, "A");
System.out.println("letters = "+vowels+", list = "+list);
list.add("U");
System.out.println("letters = "+vowels+", list = "+list);
}
}
以上java列表示例程序的输出是;
[A, E, I]
[A, E, I, O, U]
letters list size = 5
[A, E, E, O, U]
letters = [E, E, I, O], list = [E, E]
letters = [A, E, I, O], list = [A, E]
letters = [A, E, U, I, O], list = [A, E, U]
Java List迭代器
下面是一个简单的例子,展示了如何在java中迭代列表。
package com.journaldev.examples;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListIteratorExample {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for(int i=0; i<5; i++) list.add(i);
Iterator<Integer> iterator = list.iterator();
//simple iteration
while(iterator.hasNext()){
int i = (int) iterator.next();
System.out.print(i + ", ");
}
System.out.println("\n"+list);
//modification of list using iterator
iterator = list.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next();
if(x%2 ==0) iterator.remove();
}
System.out.println(list);
//changing list structure while iterating
iterator = list.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next(); //ConcurrentModificationException here
if(x==1) list.add(10);
}
}
}
以上java列表迭代器程序的输出是;
0, 1, 2, 3, 4,
[0, 1, 2, 3, 4]
[1, 3]
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at com.journaldev.examples.ListIteratorExample.main(ListIteratorExample.java:34)
这就是Java中List的快速综述。我希望这些Java List示例可以帮助您开始使用List集合编程。
相关文章
- 暂无相关文章
用户点评