《熟悉List集合》第一弹

Source

目录

1.List集合的增删改查

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

3.Linkedlist 中堆栈及队列

4.List集合去重

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


1.List集合的增删改查

package com.jmh.list;

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

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

}

测试如下

 

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

package com.jmh.list;

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

/**
 * list集合的三种遍历方式
 * @author 蒋明辉
 *
 */
public class Demo02 {
public static void main(String[] args) {
	//创建一个list集合
	List<String> list=new ArrayList<>();
	//给集合里面增加值
	list.add("zs");
	list.add("li");
	list.add("we");
	list.add("ll");
	list.add("lj");
	//第一种方式: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.jmh.list;

import java.util.LinkedList;

/**
 * Linkedlist
 * 1.Linkedlist和ArrayList的区别
 * 	 linkedlist的底层是链表
 *   ArrayList底层是数组
 * 2.堆栈特点:先进后出
 * 3.队列特点:先进先出
 * @author 蒋明辉
 *
 */
public class Demo03 {
	public static void main(String[] args) {
		//开始测试  队列
		duilie dl=new duilie(new LinkedList<>());
		//调用增加的方法
		dl.push("zs");
		dl.push("ls");
		dl.push("we");
		dl.push("mz");
		//开始取出
		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集合去重

package com.jmh.list;

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

/**
 * List集合重复元素去重
 * 1.底层是是重写eq方法来执行去重元素
 * @author 蒋明辉
 *
 */
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集合如何去优化 

package com.jmh.list;

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

/**
 * List增长因子论证、List集合如何去优化
 * 1.list集合底层是数组
 *  疑惑点:数组的长度是不可变的、可list集合能无限制的添加元素
 * 2.list集合底层数组的初始化容量是10、增长因子是0.5
 *  针对上面的疑惑:数组容量达到上限会进行扩容
 * 3.list集合进行优化、只需要扩大初始化容量、减少扩容的次数、进一步提到性能
 *  有意识的设置初始化容量
 * @author 蒋明辉
 *
 */
public class Demo05 {
	public static void main(String[] args) throws Exception, SecurityException {
		//创建一个集合
		ArrayList<Integer> arr=new ArrayList<>();
		//循环增加100次
		for (int i = 0; i < 50; i++) {
			arr.add(i);
			getElementDataLength(arr);
		}
	}

	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);
	}

}

 测试如下