Java类集框架-List
List集合
概述
-
有序集合,这里的有序指的是存取顺序
-
用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素
-
与Set集合不同,列表通常允许重复的元素
特点
-
存取有序
-
可以重复
-
有索引
public class Demo03 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
Iterator<String> it = list.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
System.out.println("=================");
for (String str : list) {
System.out.println(str);
}
//aaa
//bbb
//ccc
//=================
//aaa
//bbb
//ccc
}
}
List集合的特有方法
方法名 | 描述 |
---|---|
void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
E get(int index) | 返回指定索引处的元素 |
其中这里的remove()方法是下面第一个,与之前所学的不一样,之前是传入一个object对象,这里只是传入位置索引的值。
代码实现
public class Demo03 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
// (1)void add(int index,E element)在此集合中的指定位置插入指定的元素
// 原来index位置上的元素会往后移一个位置
list.add(0,"qqq");
System.out.println(list);
// [qqq, aaa, bbb, ccc]
// (2)E remove(int index)删除指定索引处的元素,返回被删除的元素
list.remove(0);
System.out.println(list);
// [aaa, bbb, ccc] 恢复原样!
// (3)E set(int index,E element)修改指定索引处的元素,返回被修改的元素
list.set(2,"ddd");
System.out.println(list);
// [aaa, bbb, ddd]
// (4)E get(int index)返回指定索引处的元素
System.out.println(list.get(0));
//aaa
}
}
List集合子类的特点
-
ArrayList集合
底层是数组结构实现,查询快、增删慢
-
LinkedList集合
底层是链表结构实现,查询慢、增删快
ArrayList集合
是List接口的一个实现类。
构造方法和添加方法
public ArrayList() | 创建一个空的集合对象 |
---|---|
public boolean add(E e) | 将指定的元素追加到此集合的末尾 |
public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
ArrayList<String> arrayList = new ArrayList<>();
ArrayList类常用方法
public boolean remove(Object o) | 删除指定的元素,返回删除是否成功 |
---|---|
public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
public E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
public E get(int index) | 返回指定索引处的元素 |
public int size() | 返回集合中的元素的个数 |
使用方法与上述类似,这里就不做过多的演示!
ArrayList底层原理
底层是数组结构实现,查询快、增删慢
空参构造方法
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
transient Object[] elementData;
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
add()方法源码分析
LinkList集合
底层是链表结构实现,查询慢、增删快
特有功能
方法名 | 说明 |
---|---|
public void addFirst(E e) | 在该列表开头插入指定的元素 |
public void addLast(E e) | 将指定的元素追加到此列表的末尾 |
public E getFirst() | 返回此列表中的第一个元素 |
public E getLast() | 返回此列表中的最后一个元素 |
public E removeFirst() | 从此列表中删除并返回第一个元素 |
public E removeLast() | 从此列表中删除并返回最后一个元素 |
代码实现
public class Demo03 {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
//(1)public void addFirst(E e) 在该列表开头插入指定的元素
list.addFirst("first");
System.out.println(list);
//[first, aaa, bbb, ccc]
//(2)public void addLast(E e) 将指定的元素追加到此列表的末尾
list.addLast("last");
System.out.println(list);
//[first, aaa, bbb, ccc, last]
//(3)public E getFirst() 返回此列表中的第一个元素
System.out.println(list.getFirst());
//first
//(4)public E getLast() 返回此列表中的最后一个元素
System.out.println(list.getLast());
//last
//(5)public E removeFirst() 从此列表中删除并返回第一个元素
list.removeFirst();
System.out.println(list);
//[aaa, bbb, ccc, last]
//(6)public E removeLast() 从此列表中删除并返回最后一个元素
list.removeLast();
System.out.println(list);
//[aaa, bbb, ccc]
}
}
LinkList源码
LinikList是双向链表结构的
在LinkList里面有一个内部类
private static class Node<E> {
E item;
Node<E> next;
Node<E> prev;
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
在Java中,链表的基本实现已经被封装起来了,不像C/C++那样增删查改的逻辑都要自己写。
下回分解
Java类集框架-Sethttps://blog.csdn.net/weixin_43715214/article/details/122787661