app下载网站免费,怎么让百度收录你的网站,自己做网站广告法,最好用的网站建设软件List系列集合
特点#xff1a;有序、可重复、有索引
ArrayList#xff1a;有序、可重复、有索引LinkedList#xff1a;有序、可重复、有索引 List集合的特有方法
List集合因为支持索引#xff0c;所以多了很多与索引相关的方法#xff0c;当然#xff0c;Collection的…List系列集合
特点有序、可重复、有索引
ArrayList有序、可重复、有索引LinkedList有序、可重复、有索引 List集合的特有方法
List集合因为支持索引所以多了很多与索引相关的方法当然Collection的功能List也都继承了 代码演示
import java.util.ArrayList;
import java.util.List;public class ListTest1 {public static void main(String[] args) {// 1.创建一个ArrayList集合对象(有序、可重复、有索引)ListString list new ArrayList(); //一行经典代码,多态写法list.add(愚者);list.add(正义);list.add(倒吊人);list.add(太阳);System.out.println(list); //[愚者, 正义, 倒吊人, 太阳]//2.public void add(int indexE element):在某个索引位置插入元素。list.add(2,魔术师); //在索引位置为2的地方插入元素System.out.println(list); //[愚者, 正义, 魔术师, 倒吊人, 太阳]//3.public E remove(int index):根据索引删除元素,返回被删除元素String name list.remove(3); //删除索引为3的元素并返回System.out.println(list); //[愚者, 正义, 魔术师, 太阳]System.out.println(name); //倒吊人// 4.public E get(int index):返回集合中指定位置的元素。String name2 list.get(3); //返回索引为3的元素System.out.println(list); //[愚者, 正义, 魔术师, 太阳]System.out.println(name2); //太阳//5.public E set(int index,E element): 修改索引位置处的元素,修改成功后会返回原来的数据String name3 list.set(3,隐者); //修改索引为3的元素的内容,原内容返回System.out.println(name3); //太阳System.out.println(list); //[愚者, 正义, 魔术师, 隐者]}
}
运行结果 List集合的遍历方式
for循环(因为List集合有索引)迭代器增强for循环Lambda表达式
代码演示
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class ListTest2 {public static void main(String[] args) {// 1.创建一个ArrayList集合对象(有序、可重复、有索引)ListString list new ArrayList(); //一行经典代码,多态写法list.add(愚者);list.add(正义);list.add(倒吊人);list.add(太阳);System.out.println(list); //[愚者, 正义, 倒吊人, 太阳]//(1)for循环for (int i 0; i list.size(); i) {System.out.println(list.get(i)); //愚者 正义 倒吊人 太阳}System.out.println(-------------------------------------);//(2)迭代器IteratorString iterator list.iterator();while(iterator.hasNext()){System.out.println(iterator.next()); //愚者 正义 倒吊人 太阳}System.out.println(-------------------------------------);//(3)增强for循环()for (String s : list) {System.out.println(s); //愚者 正义 倒吊人 太阳}System.out.println(-------------------------------------);//(4)JDK 1.8开始之后的Lambda表达式list.forEach(System.out::println); //愚者 正义 倒吊人 太阳}
}运行结果 ArrayList集合的底层原理
ArrayList集合与LinkedList集合底层采用的数据结构不同应用场景不同
数据结构存储、组织数据的方式
ArrayList集合的底层原理
ArrayList集合是基于数组实现的
数组内存中的一块连续区域把该区域分成若干个相等的小区域每个区域都有自己的索引每个区域都存一个数据数组的基本特点查询速度快注意是根据索引查询数据快删除效率低可能需要把后面很多数据进行前移添加效率极低可能需要把后面很多的数据后移再添加元素或者也可能需要进行数组的扩容总结查询快增删慢
Arraylist集合的底层原理
利用无参构造器创建的集合会在底层创建一个默认长度为0的数组添加第一个元素时底层会创建一个新的长度为10的数组存满时会扩容1.5倍如果一次添加多个元素1.5倍还放不下则新创建数组的长度以实际为准
ArrayList集合适合的应用场景
1、ArrayLis集合t适合:根据索引查询数据比如根据随机索引取数据:(高效)!或者数据量不是很大时!2、ArrayList集合不适合:数据量大的同时又要频繁的进行增删操作! LinkedList集合的底层原理
LinkedList集合是基于双链表实现的
什么是链表
一种数据结构链表中的结点是独立的对象在内存中是不连续的每个结点包含数据值和下一个结点的地址 链表的特点1:查询慢无论查询哪个数据都要从头开始找链表的特点2:链表增删相对快
双链表在记录下一个结点的基础上也记录了上一个结点的位置 LinkedList的特点查询慢增删相对较快但对首尾元素进行增删改查的速度是极快的
LinkedList新增了:很多首尾操作的特有方法 LinkedList集合适合的应用场景
LinkedList的应用场景之一:可以用来设计队列先进先出后进后出只是在首尾增删元素,用Linkecllist来实现很合适!
代码演示
import java.util.LinkedList;public class ListTest3 {public static void main(String[] args) {LinkedListString queue new LinkedList();//入队queue.addLast(one);queue.addLast(two);queue.addLast(three);queue.addLast(four);System.out.println(queue); //[one, two, three, four]//出队System.out.println(queue.removeFirst()); //oneSystem.out.println(queue.removeFirst()); //twoSystem.out.println(queue.removeFirst()); //threeSystem.out.println(queue); //[four]}
}
LinkedList的应用场景之二:可以用来设计栈后进先出先进后出只是在首部增删元素,用Linkecllist来实现很合适!
代码演示
import java.util.LinkedList;public class ListTes4 {public static void main(String[] args) {LinkedListString stack new LinkedList();//压栈pushstack.push(第一颗子弹);stack.push(第二颗子弹);stack.push(第三颗子弹);stack.push(第四颗子弹);System.out.println(stack); //[第四颗子弹, 第三颗子弹, 第二颗子弹, 第一颗子弹]//出栈popSystem.out.println(stack.pop()); //第四颗子弹System.out.println(stack.pop()); //第三颗子弹System.out.println(stack.pop()); //第二颗子弹System.out.println(stack); //[第一颗子弹]}
}