List集合详细介绍

文章介绍了List集合的基本特点,包括增删改查、有序和元素可重复,并展示了三种遍历List的方法:for-each、for循环和迭代器。此外,文章通过LinkedList实现堆栈容器,演示了其弹栈操作。最后,讨论了ArrayList的增长因子问题,比较了未优化和优化后的扩容行为,强调了预设容量对性能的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

List集合概述

一.List集合的特点

 二.遍历方式

 三.LinkedList实现堆栈容器

四.增长因子


List集合概述

  List集合是一个元素有序(每个元素都有对应的顺序索引,第一个元素索引为0)、且可重复的集合。

一.List集合的特点

 1.list集合容器具备增删改查
 2.有序
 3.元素可重复

package com.liao.tast;

import java.util.ArrayList;
import java.util.List;

/**
 * list集合的特点 
 * 
 * 1.list集合容器具备增删改查
 * 2.有顺序
 * 3.元素可以重复
 * @author liao
 *
 */
public class Dome1 {
	public static void main(String[] args) {
		List list = new ArrayList();
		//增加
		list.add("a");
		list.add("b");
		list.add("c");
		
		
		System.out.println(list);
		//删除
		list.remove("b");
		System.out.println(list);
		//修改
		list.set(1, "v");
		//查看
		System.out.println(list);
		
	}

}

 二.遍历方式

1.forir 
2.foreach
3.迭代器 iteration

package com.liao.tast;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
 * List的循环方式
 * 1.forir 
 * 2.foreach
 * 3.迭代器 iteration
 * 
 * 
 * @author Administrator
 *
 */
public class Dome2 {

	public static void main(String[] args) {
		List list = new ArrayList();
		// 增加
		list.add("a");
		list.add("b");
		list.add("c");

		// forir遍历
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		// foreach遍历
		for (Object object : list) {
			System.out.println(object);
		}

		// 迭代器遍历
		Iterator it = list.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}
	}
	
	
	
}

 三.LinkedList实现堆栈容器

package com.liao.tast;
/**
 * LinkedList实现堆栈容器
 * @author liao
 *
 */

import java.util.LinkedList;

public class Dome3 {
	
	
	public static void main(String[] args) {
		/**
		 * LinkedList特点 
		 * 链表方式
		 * 查询修改速度慢  增加删除快
		 * 
		 */
		LinkedList ll = new LinkedList();
		//增加
		ll.add("a");
		ll.add("b");
		ll.add("c");
		//实例化DuiZhan
		DuiZhan dz = new DuiZhan(ll);
		
		//弹栈
		System.out.println(dz.pop());
		System.out.println(dz.pop());
		System.out.println(dz.pop());
	}
}
	//创建一个类DuiZhan
	class DuiZhan {
		private LinkedList ll;

		public DuiZhan(LinkedList ll) {
			super();
			this.ll = ll;
		}
		
		//压栈 弹栈
		public Object pop(){
			return ll.removeLast();
			
		}
	}

	
	
	
	

运行结果:

 堆栈特点:先进后出,意思是先进去的数据会最后输出

四.增长因子

1.数组长度不可改变 但是集合长度可以扩容

优化前:数据到达长度上限就会一直增长扩容就会导致会影响性能

package com.liao.tast;
/**
 * list调优
 * ArrayList
 * @author Administrator
 *	ArrayList扩容因子1.5   增长因子0.5
 */

import java.lang.reflect.Field;
import java.util.ArrayList;
//ArrayList特点:查询修改快 增加删除慢
public class Dome4 {
public static void main(String[] args) throws Exception, Exception  {
	//定义ArrayList数组
    //没有优化前
	ArrayList list = new ArrayList();
	for (int i = 0; i < 100; i++) {
		list.add(list);
		System.out.print(i+"\r");
		getCurrentArrayLength(list);
	}
	
}
//获取当前数组的长度
private static void getCurrentArrayLength(ArrayList list) throws Exception, SecurityException {
	Field f = list.getClass().getDeclaredField("elementData");
	f.setAccessible(true); 
	Object[] object = (Object[]) f.get(list);
	System.out.println("当前容器长度"+object.length);
}
	
	
	
	
	
	
}

运行结果: 


优化后:指定长度就可以优化

package com.liao.tast;
/**
 * list调优
 * ArrayList
 * @author Administrator
 *	ArrayList扩容因子1.5   增长因子0.5
 */

import java.lang.reflect.Field;
import java.util.ArrayList;
//ArrayList特点:查询修改快 增加删除慢
public class Dome4 {
public static void main(String[] args) throws Exception, Exception  {
	//定义ArrayList数组
    //优化后
	ArrayList list = new ArrayList(50);//到50在进行扩容
	for (int i = 0; i < 100; i++) {
		list.add(list);
		System.out.print(i+"\r");
		getCurrentArrayLength(list);
	}
	
}
//获取当前数组的长度
private static void getCurrentArrayLength(ArrayList list) throws Exception, SecurityException {
	Field f = list.getClass().getDeclaredField("elementData");
	f.setAccessible(true); 
	Object[] object = (Object[]) f.get(list);
	System.out.println("当前容器长度"+object.length);
}
	
	
	
	
	
	
}

运行结果: 

结论:数组长度每次增加到最大值就会扩容

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值