概述
List中的元素是有序的,且允许重复。重点掌握ArrayList和LinkedList
1.1 List接口相比Colleciton接口的新增方法
List接口比Collection接口中新增的几个实用方法:
- public Object get(int index) 根据下标,返回列表中的元素
- public Object add(int index, Object element); 在列表的指定位置插入指定元素.将当前处于该位置的元素(如果有的话)和所有后续元素向右移动
- public Object set(int index, Object element) ; 用指定元素替换列表中指定位置的元素
- public Object remove(int index) 移除列表中指定位置的元素
注意:list集合中的元素的索引与数组中元素的索引一样,均是从0开始。
1.2 ArrayList集合
底层通过数组扩容(Arrays.copuOf())实现动态可变集合,存储的必须是对象,不能存储基础数据类型。(储存地址连续)
package com.qianfeng.cl;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
*
* @Title DemoArrayList.java
* @Package com.qianfeng.cl
* @Description
* @author CL
* @date 2020年3月5日
* @version 1.0
*/
public class DemoArrayList {
public static void main(String[] args) {
test();
}
public static void test() {
List<String> arrayList = new ArrayList<String>();
//增
for(int i = 1;i < 10; i++) {
arrayList.add("jack"+i);
}
System.out.println("--------------------------");
//删
arrayList.remove(2);
//改
arrayList.set(3, "trom");
//查
//普通for循环
for(int i = 0 ;i < arrayList.size();i++) {
System.out.println(arrayList.get(i));
}
System.out.println("--------------------------");
//增强for循环,尽量只进行打印操作,不进行其他操作
for(String str:arrayList) {
System.out.println(str);
}
System.out.println("--------------------------");
//迭代器
for(Iterator<String> iterator = arrayList.iterator();
iterator.hasNext();System.out.println(iterator.next())) {
}
//清空操作
arrayList.clear();
}
}
1.3 LinkedList集合
底层数据使用双向链表进行储存,且每个链表结点都储存有头结点和尾结点的引用,存储的必须是对象,不能存储基础数据类型。(储存地址不连续)
LinkedList集合和ArrayList集合API方法一模一样
package com.qianfeng.cl;
import java.util.LinkedList;
import java.util.Iterator;
import java.util.List;
/**
*
* @Title DemoLinkedList.java
* @Package com.qianfeng.cl
* @Description
* @author CL
* @date 2020年3月5日
* @version 1.0
*/
public class DemoLinkedList {
public static void main(String[] args) {
test();
}
public static void test() {
//LinkedList集合操作方法和ArrayList一模一样
List<String> linkedList = new LinkedList<String>();
//增
for(int i = 1;i < 10; i++) {
linkedList.add("jack"+i);
}
System.out.println("--------------------------");
//删
linkedList.remove(2);
//改
linkedList.set(3, "trom");
//查
//普通for循环
for(int i = 0 ;i < linkedList.size();i++) {
System.out.println(linkedList.get(i));
}
System.out.println("--------------------------");
//增强for循环,尽量只进行打印操作,不进行其他操作避免出现错误
for(String str:linkedList) {
System.out.println(str);
}
System.out.println("--------------------------");
//迭代器
for(Iterator<String> iterator = linkedList.iterator();
iterator.hasNext();System.out.println(iterator.next())) {
}
//清空集合
linkedList.clear();
}
}
1.4 ArrayList与LinkedList性能比较
package com.qianfeng.cl;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
*
* @Title Test.java
* @Package com.qianfeng.cl
* @Description 测试速度
* @author CL
* @date 2020年3月5日
* @version 1.0
*/
public class Test {
public static void main(String[] args) {
List<Integer> arrayList = new ArrayList<Integer>();
List<Integer> linkedList = new LinkedList<Integer>();
//添加数据
test1(arrayList);
test1(linkedList);
//修改数据
test2(arrayList);
test2(linkedList);
//查询所有数据
test3(arrayList);
test3(linkedList);
//删除所有数据
test4(arrayList);
test4(linkedList);
//结果如下:
//class java.util.ArrayList顺序添加耗时6ms
//class java.util.LinkedList顺序添加耗时3ms
//class java.util.ArrayList修改单个耗时82ms
//class java.util.LinkedList修改单个耗时62ms
//class java.util.ArrayList查询所有数据耗时2ms
//class java.util.LinkedList查询所有数据耗时5545ms
//class java.util.ArrayList删除所有数据耗时405ms
//class java.util.LinkedList删除所有数据耗时2ms
}
//测试ArrayList和LinkedList添加数据的速度
public static void test1(List<Integer> list) {
long start = System.currentTimeMillis();
for(int i = 0; i < 100000;i++) {
list.add(i);
}
long end = System.currentTimeMillis();
System.out.println(list.getClass()+"顺序添加耗时"+(end-start)+"ms");
}
//测试ArrayList和LinkedList修改数据的速度
public static void test2(List<Integer> list) {
long start = System.currentTimeMillis();
for(int i = 0; i < 10000000;i++) {
list.set(2,i);
}
long end = System.currentTimeMillis();
System.out.println(list.getClass()+"修改单个耗时"+(end-start)+"ms");
}
//测试ArrayList和LinkedList查询数据的速度
public static void test3(List<Integer> list) {
long start = System.currentTimeMillis();
for(int i = 0; i < list.size();i++) {
list.get(i);//只查询不进行打印
}
long end = System.currentTimeMillis();
System.out.println(list.getClass()+"查询所有数据耗时"+(end-start)+"ms");
}
//测试ArrayList和LinkedList删除数据的速度
public static void test4(List<Integer> list) {
long start = System.currentTimeMillis();
for(int i = 0; i < list.size();) {
list.remove(i);
}
long end = System.currentTimeMillis();
System.out.println(list.getClass()+"删除所有数据耗时"+(end-start)+"ms");
}
}
最后
以上就是坦率大碗为你收集整理的java进阶学习一之List的全部内容,希望文章能够帮你解决java进阶学习一之List所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复