J2EE_02 list集合

1.List集合的增删改查

1.1增删改查

package com.tft.temp;

import java.util.ArrayList;
import java.util.List;
/**
 * list集合增删改查
 * @author Administrator
 *
 */
public class Demo01 {
	public static void main(String[] args) {
		//创建一个list集合
		List<String> list =new ArrayList<>();
		//给集合里面增加值
		list.add("zs");
		list.add("li");
		list.add("tft");
		list.add("ww");
		list.add("pp");
		//输出
		System.out.println("增加后的集合:"+list);
		//修改
		list.set(0, "hh");
		System.out.println("修改后的集合"+list);
		//删除
		String remove = list.remove(1);
		System.out.println("根据下标被删除的内容"+remove);
		System.out.println("删除后的内容"+list);
	}


}

1.2 Arrylist与linkedList的区别

1.2.1 Arrylist

  • 特点: ArrayList底层是数组

1.2.2 LinkedList

  • 特点:Linkedlist的底层是链表
    在这里插入图片描述

2.List集合的三种遍历方式

注意:遍历里面不能进行remove删除 ,会报当前改变异常

package com.tft.temp;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
 * List集合的三种遍历方式
 * @author Administrator
 *
 */
public class Demo01 {
	public static void main(String[] args) {
		//创建一个list集合
		List<String> list =new ArrayList<>();
		//给集合里面增加值
		list.add("zs");
		list.add("li");
		list.add("tft");
		list.add("ww");
		list.add("pp");
		//第一种方式:for循环输出
		for (int i = 0; i < list.size(); i++) {
			System.out.println("使用for循环输出:"+list.get(i));
		}
		//第二种方式:for循环加强方式输出
		for (String str : list) {
			System.out.println("使用for循环加强输出:"+str);
		}
		//第三种方式:Iterator迭代器输出
		Iterator<String> iterator = list.iterator();
		//判断是否有下一个值
		while(iterator.hasNext()) {//代表有就执行下一步
			System.out.println("迭代器输出:"+iterator.next());//输出
		}


	}


}

在这里插入图片描述

3.Linkedlist 中堆栈及队列

  • 堆栈
    特点: 先进后出
  • 队列
    特点:先进先出
package com.tft.temp;

import java.util.LinkedList;
/**
 * 使用link集合创建队列/堆栈
 * 堆栈特点:先进后出
 * 队列特点:先进先出
 * @author Administrator
 *
 */
public class Demo03 {
	public static void main(String[] args) {
		//开始测试  队列
		duilie dl=new duilie(new LinkedList<>());
		//调用增加的方法
		dl.push("zs");
		dl.push("ls");
		dl.push("hh");
		dl.push("dd");
		//开始取出
		System.out.println("================");
		System.out.println(dl.pop());
		System.out.println(dl.pop());
		System.out.println(dl.pop());
		System.out.println(dl.pop());
		//开始测试 堆栈
		duizhan dz=new duizhan(new LinkedList<>());
		//调用增加的方法
		dz.push("zs1");
		dz.push("ls1");
		dz.push("we1");
		dz.push("mz1");
		//开始取出
		System.out.println("================");
		System.out.println(dz.pop());
		System.out.println(dz.pop());
		System.out.println(dz.pop());
		System.out.println(dz.pop());
	}
	
	
	
}
//创建一个队列类
	class duilie{
		private LinkedList<String> list;
		//增加元素的方法
		public void push(String list) {
			this.list.add(list);
		}
		//移除元素的方法(取出/出去)
		public String pop() {
			return this.list.remove();
		}
		
		public LinkedList<String> getList() {
			return list;
		}
 
		public void setList(LinkedList<String> list) {
			this.list = list;
		}
 
		public duilie(LinkedList<String> list) {
			super();
			this.list = list;
		}
 
		@Override
		public String toString() {
			return "duilie [list=" + list + "]";
		}
		public duilie() {
		}
	}
	
	//创建一个堆栈类
		class duizhan{
			private LinkedList<String> list;
			//增加元素的方法
			public void push(String list) {
				this.list.add(list);
			}
			//移除元素的方法(取出/出去)
			public String pop() {
				return this.list.removeLast();//从最后一个开始取出即可(删除的对象)
			}
			
			public LinkedList<String> getList() {
				return list;
			}
 
			public void setList(LinkedList<String> list) {
				this.list = list;
			}
			public duizhan(LinkedList<String> list) {
				super();
				this.list = list;
			}
			@Override
			public String toString() {
				return "duilie [list=" + list + "]";
			}
			public duizhan() {
				super();
			}

}

在这里插入图片描述

4.List集合去重

注意:底层是是重写eq方法来执行去重元素

package com.tft.temp;

import java.util.ArrayList;
import java.util.List;
/**
 * list集合去重
 * @author Administrator
 *
 */
public class Demo04 {
	public static void main(String[] args) {
		
		//案例一 创建集合 增加五个元素 要求去重并且只输出去重后的元素
		List<String> list=new ArrayList<>();
		//新增一个集合 来保存去重后的元素
		List<String> oldList=new ArrayList<>();
		//开始增加
		list.add("张三");
		list.add("李四");
		list.add("王二");
		list.add("张三");
		System.out.println("去重前"+list);
		//开始去重
		//遍历
		for (String string : list) {
			//判断如果新集合不包含老集合的元素就增加到新集合
			if(!oldList.contains(string)) {
				oldList.add(string);
			}
		}
		System.out.println("去重后"+oldList);
	}
	

	
}

在这里插入图片描述

5.List集合增长因子论证、List集合如何去优化

1.list集合底层是数组
2.list集合底层数组的初始化容量是10、增长因子是0.5
3.list集合进行优化、只需要扩大初始化容量、减少扩容的次数、进一步提到性能

问:数组的长度是不可变的、可list集合为何能无限制的添加元素? 答:数组容量达到上限会进行扩容

有意识的设置初始化容量

package com.tft.temp;

import java.lang.reflect.Field;
import java.util.ArrayList;

/**
 * List集合增长因子论证、List集合优化 
 * @author Administrator
 *
 */
public class Demo05 {
public static void main(String[] args) {
	
	        //创建一个集合
			ArrayList<Integer> arr=new ArrayList<>();
			//循环增加100次
			for (int i = 0; i < 50; i++) {
				arr.add(i);
				try {
					getElementDataLength(arr);
				} catch (SecurityException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	 
		private static void getElementDataLength(ArrayList<Integer> arr) throws Exception, SecurityException {
			//拿到List集合属性对象
			Field f = arr.getClass().getDeclaredField("elementData");
			//打开属性的设置权限
			f.setAccessible(true);
			//拿到数组对象
			Object[] ob = (Object[])f.get(arr);
			//测试
			System.out.println("容器中的元素个数:"+arr.size()+"容器中的元素大小:"+ob.length);

	
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值