List集合
- List集合是一个元素有序,可重复的集合,集合中每个元素都有其对应的顺序索引
- List集合允许重复使用元素,可以通过索引来访问指定位置的集合元素
- List集合默认按照元素的添加顺序设置元素的索引,索引从0开始
- 以下是List接口的一些特殊方法体现
import java.util.ArrayList;
import java.util.List;
public class ListTest {
public static void main(String[] args) {
List l = new ArrayList();
l.add("yjh728");
l.add("YJH");
l.add("728");
l.add("728");
System.out.println(l);
l.remove("728");
System.out.println(l);
for (Object obj : l) {
System.out.println((String) obj);
}
System.out.println(l);
l.add(1, "728");
System.out.println(l);
System.out.println(l.get(2));
System.out.println(l.indexOf("728"));
System.out.println(l.lastIndexOf("728"));
l.set(1, "0728");
System.out.println(l);
l.remove("0728");
System.out.println(l);
System.out.println(l.subList(0, 2));
}
}
- Java8为List结合增加了sort()和replaceAll()两个常用的默认方法
import java.util.ArrayList;
import java.util.List;
public class ListTest {
public static void main(String[] args) {
List l = new ArrayList();
l.add("yjh728");
l.add("YJH");
l.add("728");
l.sort((o1, o2) -> ((String) o1).length() - ((String) o2).length());
System.out.println(l);
l.replaceAll(ele -> ((String) ele).length());
System.out.println(l);
}
}
- List相对于Set额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,该类在Iterator类的基础上增加了向前迭代的功能
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorTest {
public static void main(String[] args) {
List l = new ArrayList();
l.add("yjh");
l.add("728");
l.add("YJH728");
ListIterator lt = l.listIterator();
while (lt.hasNext()) {
System.out.println((String) (lt.next()));
lt.add("========================");
}
System.out.println("下面开始反迭代");
while (lt.hasPrevious()) {
System.out.println((String) (lt.previous()));
}
System.out.println(l);
}
}
ArrayList实现类
- ArrayList是线程不安全的
- ArrayList集合是List接口的典型实现,它是基于数组实现的List类
- ArrayList类封装了一个动态的、允许在分配的Object[]数组。
- 它的实例(对象)可以通过initialCapacity参数来设置该数组的长度
- 创建对象时若不指定initialCapacity参数,系统自动为数组设置长度为10
- 当元素超过数组长度时,initialCapacity会自动增加,但是当添加大量数据时会增加initialCapacity自动增加的次数,导致性能下降
- 因此,当大量改变元素的个数时,可以通过ensureCapacity()方法和trimToSize()方法来重新分配Object[]数组
- void ensureCapacity(int minCapacity):将赎罪长度增加大于或等于minCapacity值
- void trimToSize()调整数组长度为当前元素的个数,可以减少集合对象占用的储存空间
Vector实现类
- Vector是线程安全的,因此性能比ArrayList性能差
- Vector实现类与ArrayList实现类在用法上几乎完全相同,在这里不多做叙述
- Vector在JDK1.0就出现了,有很多的缺点,一般不建议使用Vector实现类、
- Vector还提供了一个Stack子类,可以实现栈的功能,因出现较早,所以性能较差,仍不建议使用,若想实现栈的功能,可以选择使用ArrayDeque类
数组长度固定的List
import java.util.Arrays;
import java.util.List;
public class FixedSizeList {
public static void main(String[] args) {
List fixedSize = Arrays.asList("yjh", "728", "yjh728");
System.out.println(fixedSize);
}
}