collection集合框架01

本文深入探讨了Java集合框架中的Collection接口,它是Set和List接口的父接口,但不包括Map。文章介绍了集合只能存储引用类型数据,并详细讲解了List接口的特点,如有序、可重复,以及遍历方式,包括下标、foreach和迭代器。此外,还讨论了泛型的引入及其作用,以及装箱和拆箱的概念。最后,对比分析了ArrayList、LinkedList和Vector的区别,强调了它们在查询速度和增删改性能上的差异。
摘要由CSDN通过智能技术生成

2bee5accec624e198874ee08073c3a4f.png

 

 

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元素删除

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

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

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

 


 34cc538bdbe34ab2bc7efec3fbcd5d48.png

 7101be0910194e43bae7be11df1194d2.png

 

 代码段分析

package com.zking.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的父接口,但不是Map集合的父接口
		
		//3.List特点:不唯一、有序????
		//1) 不唯一:不是唯一、可以添加重复元素
		//2) 有序:元素添加的顺序与输出的顺序一致
		//快捷键:Ctrl+Shift+O
		List lst=new ArrayList();
		lst.add("zs");
		lst.add("ls");
		lst.add("ww");
		lst.add("zs");
		
		//jdk1.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(迭代器)
		System.out.println("---------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 4
		//第二次删除:i=1 lst.remove(1) c 3
		//第三次删除:i=2  2<2
		int len=lst.size();
		for (int i = 0; i <len; i++) {
			lst.remove(0);
		}
		int lens=lst.size()-1;
		for (int i = lens; i>=0; i--) {
			lst.remove(i);
		}
		//获取迭代器
		ListIterator its = lst.listIterator();
		while(its.hasNext()) {
			//注:先移动下标,再删除元素
			its.next();
			its.remove();
		}
//		lst.clear();
		System.out.println("删除之后的List集合大小:"+lst.size());
	}
}

 


99f775900ade402cb32100437683dfca.png  

package com.zking.util;

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=15
	 * 第二次:15*1.5=22
	 * 第三次:22*1.5=33
	 * @param args
	 */
	public static void main(String[] args) {
		List lst=new ArrayList(50);
		for (int i = 0; i < 50; i++) {
			lst.add(i);
			System.out.println(i);
			getLen(lst);
		}
	}
	
	public static void getLen(List lst) {
		try {
			//获取类对象
			Class<? extends List> cla = lst.getClass();
			//获取类中对应的属性
			Field field = cla.getDeclaredField("elementData");
			//设置访问权限
			field.setAccessible(true);
			//获取属性
			Object[] object = (Object[]) field.get(lst);
			//获取数组的长度
			System.out.println("当前List集合的大小为:"+object.length);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

}

 


 42826b23fc15418d8ceefbe65524badc.png

 9021d4214845472bac2555bbcefa5428.png

 

package com.zking.util;

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

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

}




 

10e81f1cd4f943f9bca428bcfc7e90d9.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值