集合框架【第一章】——List-使用LinkedList完成一个堆栈MyStack(为例)

 //首先使用LinkedList完成一个堆栈MyStack(以枪为通俗易懂的例子)

package com.zking.Collection.util;

import java.util.LinkedList;

public class MyStack {
	//以枪中的子弹为例
	//弹夹
	private LinkedList<Object> ls=new LinkedList<>();
	//装弹
	public void push(Object object) {
		ls.addFirst(object);//每次都把子弹增加到第一弹,把原来的压到下面去
	}
	//打枪
	public Object pop() {
		Object object=ls.getFirst();//取出第一弹
		ls.removeFirst();
		return object;
	}
	public int size() {
		return ls.size();
	}
	public static void main(String[] args) {//如果子弹的数目不等于1则一直循环下去
		MyStack ms=new MyStack();
		ms.push("a");
		ms.push("b");
		ms.push("c");
		ms.push("m");
		while(ms.size()!=0) {
		 System.out.println(ms.pop());
		}
	}
	
}

//其次一些集合框架(例子代码)

1. Collection接口
  1.1 集合框架的顶级接口
  1.2 是Set和List的父接口
  1.3 但不是Map的父接口

(如图所示)


  
  集合中只能添加引用类型数据

2. List接口
  2.1 特点:有序、对象可以重复 ?
  2.2 遍历方式 
    2.2.1 下标
    2.2.2 foreach(>=jdk1.5)
    2.2.3 迭代器Iterator(原理)
  2.3 List优化
      初始容量10,负载因子1.5

      指定初始容量
  2.4 List元素删除

(以下代码为例供参考)

package com.zking.Collection.util;

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

public class Demo {

	public static void main(String[] args) {
		//1.UML:统一建模语言,例如:类图,用例图等等
		//2.Collection接口:是集合框架的顶级接口,是list和set的父级接口,但不是Mep集合的父级接口
		//3.list特点:不唯一、有序
		//1)不唯一:不是唯一、可以添加重复元素
		//2)有序:元素添加顺序与输出顺序一致
		List lst=new ArrayList();
		
		lst.add("hh");
		lst.add("dd");
		lst.add("yy");
		lst.add("mm");
		
		//jbk1.8新特性
		lst.forEach(System.out::println);
		//4.list遍历方式(3种)
		//1)for下标
		/*System.out.println("-------1)for下标-------");
		for (int i = 0; i < lst.size(); i++) {
			System.out.println(lst.get(i));
		}
		//2)foreach
		System.out.println("-------2)foreach-------");
		for (Object object : lst) {
			System.out.println(object);
		}
		//3)iterator(迭代器)
		//获取迭代器
		Iterator it=lst.iterator();
		//hasNext():判断集合中的下一个元素是否存在,不移动下标
		//next():移动下标并取出当前元素
		//循环遍历
		while(it.hasNext()) {
			System.out.println(it.next());
		}*/
		//5.List删除方式(3种+1)
		//1)for正向删除
		//2)for逆向删除
		//3)iterator(推荐)
		//4)clear 清空
		System.out.println("删除之前的List集合大小:"+lst.size());
		//第一次删除:i=0 lst.remove(0) a
		//第二次删除:i=1 lst.remove(1) c
		//第三次删除:i=2 2<2
		/*int len=lst.size();
		for (int i = 0; i <len ; i++) {
			lst.remove(0);
		}*/
		/*int len=lst.size()-1;
		for (int i = len; i >= 0; i--) {
			lst.remove(i);
		}*/
		ListIterator it=lst.listIterator();
		while(it.hasNext()) {
			//先移动下标在删除元素
			it.next();
			it.remove();
		}
		System.out.println("删除之前的List集合大小:"+lst.size());
		
	}
}

3. 泛型
   JDK1.5之后
   以类型作为参数的类就叫泛型
   作用:提高程序健壮性,简化代码
   泛型的默认值是Object

package com.zking.Collection.util;

import java.io.File;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class Demo1 {

	/**
	 * List优化
	 * 核心概念:
	 * 1)初始化容量:10
	 * 2)负载因子(扩容比例):1.5
	 * 3)计算公式:当前容器大小*负载因子
	 * 第一次:10*1.5(以此类推)
	 * @param args
	 */
	public static void main(String[] args) {
		List lst=new ArrayList(90);
		for (int i = 0; i < 90; i++) {
			lst.add(i);
			System.out.println(i);
			getLen(lst);
		}
	}
	public static void getLen(List lst) {
		try {
			//获取类对象
			Class<? extends List> cal=lst.getClass();
			//获取类中相应属性;
			Field filed=cal.getDeclaredField("elementData");
			filed.setAccessible(true);
			//获取属性
			Object[] object=(Object[]) filed.get(lst);
			//获取数组的长度
			System.out.println("当前List集合的大小为:"+object.length);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

4. 装箱、拆箱
   值类型->引用类型 装箱
   引用类型->值类型 拆箱
   jdk1.5之后引入了自动装箱及自动拆箱功能

public static void main(String[] args) {
		//泛型:以类型作为参数的类叫做泛型
		//作用:提高程序的健壮性、简化代码
		//泛型的默认类型:object
		//JDK1.5之后
		List lst=new ArrayList();
		lst.add(2);
		lst.add(4);
		lst.add(6);
		lst.add(9);
		//获取迭代器
		//Iterator it=lst.iterator();
		ListIterator<Iterator> it=lst.listIterator();
		while(it.hasNext()) {
			//获取元素
			Object val=it.next();
			//类型转换
			int unm=Integer.valueOf(val.toString());
			//获取偶数
			if(unm%2==0) {
				System.out.println(unm);
			}
		}
		//装箱、拆箱jdk1.5之前需要手动转拆箱(之后自动转拆箱)
		//装箱:值类型->引用类型
		int a=1;
		Integer a1=new Integer(a);
		//拆箱:引用类型->值类型
		Float f=new Float(1.5f);
		float floatValue=f.floatValue();
	}

5. ArrayList、LinkedList、Vector区别
   ArrayList:以连续的数组结构存储数据,查询快(下标)、增删改慢
   LinkedList:以链表的结构存储数据,查询慢、增删改快
   Vector:增删改查都慢,已过时

总结一下下:
1、 LinkedList是以链表的结构存储数据,查询慢、增删改快
LinkedList的特有方法:
①addFirst(E e) : 向集合中的开头添加元素
②addLast(E e):向集合的末尾添加元素
③getFirst():得到集合中的第一个元素
④getLast():得到集合中的最后一个元素
⑤removeFirst():删除集合中的第一个元素
⑥removeLast():删除集合中的最后一个元素
⑦pop(E e) : 从集合的最上面弹出一个元素
⑧push():向集合的最上面添加元素
⑨isEmpty() : 判断集合中是否有为空
2、堆栈结构有先进后出的特点,就像弹夹一样,先进去的在后进去的低下。
3.在开发时,LinkedList集合也可以作为堆栈,队列的结构使用。
使用的方法是:调用addFirst(E e) 方法和getFirst() 方法
注意不要调用add方法,否则将无法满足堆栈先进后出的特点

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值