Java拾贝第十三天——集合之List
因为数组的局限性,Java提供了集合充当容器去存储、处理若干的其他对象。
相较于数组,集合它:
- 性能更高
- 易拓展和易修改
- 更多的集合类型处理更多的数据问题
- ....
Collection
Collection,它是除Map外,所有其他集合类的根接口。
开发中很少直接使用Collection接口进行开发,基本上都是选择其子接口
List
List是Collection的子接口,可以保存重复的内容,此接口定义如下:
public interface List<E> extends Collection<E>
此接口使用了泛型,使用时必须指定具体的类型。
List常见的实现子类:ArrayList、LinkedList
ArrayList
ArrayList是List的子类,其类定义如下:
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
ArrayList是有序列表
ArrayList类的常用方法如下:
方法 | 类型 | 描述 |
---|---|---|
public void add(int index, E element) | 普通方法 | 在指定位置添加元素 |
public E get(int index) | 普通方法 | 返回指定位置的元素 |
public int indexOf(Object o) | 普通方法 | 返回元素下标 |
public E remove(int index) | 普通方法 | 删除指定位置的元素 |
public E set(int index, E element) | 普通方法 | 替换指定位置的元素 |
public void add(int index, E element) 和 public E get(int index)
在指定位置添加元素 和 返回指定位置的元素
栗子:
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();//多态性
list.add(1515);//重写,不指定下标会默认生成下标
list.add(1, 1616);
System.out.println(list.get(0));//测试默认下标
System.out.println("====================================");
for (Integer integer : list) {//遍历集合
System.out.println(integer);
}
}
程序运行结果:
1515
====================================
1515
1616
public int indexOf(Object o) 和 public E remove(int index)
根据元素返回下标 和 删除指定下标元素
栗子:
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();//多态性
list.add(1515);
list.add(1515);//可以存放相同的元素
list.add(1717);
list.add(1818);
System.out.println(list.indexOf(1818));
System.out.println(list.indexOf(1919));//测试不存在的元素
System.out.println("remove前");
for (Integer i : list) {
System.out.println(i);
}
list.remove(Integer.valueOf(1818));//传入int会当做下标 所以这里手动装箱
list.remove(0);//重载,指定下标删除元素
System.out.println("remove后");
for (Integer i : list) {
System.out.println(i);
}
}
程序运行结果:
3
-1
remove前
1515
1515
1717
1818
remove后
1515
1717
下标不合法可能会导致IndexOutOfBoundsException异常
public E set(int index, E element)
栗子:
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();//多态性
list.add(1515);//重写,不指定下标会默认生成下标
list.add(1616);
list.set(1,1717);
for (Integer integer : list) {//遍历集合
System.out.println(integer);
}
}
程序运行结果:
1515
1717
LinkedList
LinkedList是List的子类,其类定义如下:
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
LinkedList是使用"链表"的形式实现List接口,在LinkedList中,它内部每个元素都指向下一个元素。
LinkedList类的常用方法如下:
方法 | 类型 | 描述 |
---|---|---|
public void addFirst(E e) | 普通方法 | 在链表开头增加元素 |
public void addLast(E e) | 普通方法 | 在链表末尾增加元素 |
public E removeFirst() | 普通方法 | 删除链表开头的元素 |
public E removeLast() | 普通方法 | 删除链表末尾的元素 |
栗子:
public static void main(String[] args) {
LinkedList<String> link =new LinkedList<>();
link.addFirst("你");
link.addLast("是");
link.addFirst("猪");
System.out.println("remove前");
for (String s : link) {
System.out.println(s);
}
System.out.println("remove头");
link.removeFirst();
for (String s : link) {
System.out.println(s);
}
System.out.println("remove尾");
link.removeLast();
for (String s : link) {
System.out.println(s);
}
}
程序运行结果:
remove前
猪
你
是
remove头
你
是
remove尾
你
更多方法查找jdk API 有关链表最好脑海有个几何想象