一、List系列集合
1.List集合特点、特有API
1):ArrayList、LinkedList:有序,可重复,有索引
2)List集合特有方法
List集合因为支持索引,所以多了很多索引操作的独特API,其他Collection的功能List也都继承了。
① void add (int indx,E element)
在此集合中的指定位置插入指定元素
② E remove (int index)
删除指定索引处的元素,返向被删除的元素
③E set (int index,E element)
修改指定索引处的元素,返回被修改的元素
④ E get (int index)
返回指定索引处的元素
package d5_collection_list;
import java.util.ArrayList;
import java.util.List;
public class ListDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1、创建一个ArrayList集合对象
List<String> list=new ArrayList<>();
list.add("Java");
list.add("java");
list.add("MySQL");
list.add("MySQL");
//2、在某个索引位置插入元素
list.add(2, "HTML");
System.out.println(list);
//3、根据索引删除元素,返回被删除元素
System.out.println(list.remove(2));
System.out.println(list);
//4、根据索引获取元素:public E get(int index) 返回集合指定位置的元素
System.out.println(list.get(2));
//5、修改索引位置处的元素:public E set(int index,E element)
//返回修改前的数据
System.out.println(list.set(1, "高斯林"));
list.clear();
System.out.println(list);
}
}
2、List集合的遍历方式小结:
1)遍历方式
①迭代器
②增强for循环
③Lambda 表达式
④for循环(List的集合存在索引)
package d5_collection_list;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<String> list=new ArrayList<>();
list.add("Java");
list.add("java");
list.add("MySQL");
list.add("MySQL");
//for循环
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
//迭代器
System.out.println("-----------------------");
Iterator<String> it=list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
//foreach/增强for循环
System.out.println("--------------------");
for(String lists:list) {
System.out.println(lists);
//JDK1.8开始之后的Lambda表达式
System.out.println("-----------------------");
/st.forEach(e->System.out.println(e));
list.forEach(e->{
System.out.println(e);
});
}
}
}
3、ArrayList集合的底层原理
1)ArrayList底层是基于数组实现的:根据索引定位元素快,增删需要做元素的移位操作
2)第一次创建集合并添加第一个元素的时候,在底层创建一个默认长度为10的数组
4.LinkedList集合的就层原理
1)LinkedList的特点
底层数据结构是双链表,查询慢,首尾操作的速度是极快的,所以多了很多首尾操作的特有API
2)ListedList集合的特有功能
① public void addFirst(E e) 在该列表开头插入指定的元素
②public void addLast(E e)
将指定的元素追加到此列表的尾
③pubic E getFirst()
返回此列表中的第一个元素
④public E getLast() 返回此列表的最后一个元素
⑤ public E remove First()
删除并返回第一个元素
⑥ pubic E removeLast()
删除并返回最后一个元素
package d5_collection_list;
import java.util.LinkedList;
public class ListDemo3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//LinkedList可以完成队列结构,和栈结构(双链表)
//栈
LinkedList<String> stack=new LinkedList<>();
//压栈,入栈
stack.addFirst("第一颗子弹");
stack.addFirst("第二颗子弹");
stack.push("第三颗子弹");
System.out.println(stack);//[三 二 一]
//出栈 弹栈
System.out.println(stack.removeFirst());
System.out.println(stack.removeFirst());
System.out.println(stack);
//队列
LinkedList<String> queue=new LinkedList<>();
//入队
queue.addLast("1号");
queue.addLast("2号");
queue.offerLast("3号");
System.out.println(queue);
//出列
System.out.println(queue.removeFirst());
System.out.println(queue.removeFirst());
System.out.println(queue);
}
}