Java集合框架(List+Set+Map)

目录

集合简介

集合框架是?:

特点

集合和数组的区别

使用集合框架的好处

集合框架关系图

Collection接口

Collection集合主要有List和Set两大接口

List集合

List集合特点:

List的主要实现:

1、UML

遍历方式: 

List删除方式(3种+1)

List优化

泛型 

 装箱、拆箱

ArrayList、LinkedList、Vector 的区别

 List常用方法

Set集合

Set集合特点:

那么如何解决去重问题呢?

 ​编辑

遍历方式

Set的主要实现类:

 Set常用方法

Map集合

Map常用方法

Map接口

特点

遍历方式

排序TreeMap

Map 的常用实现类:

HashMap、HashTable、TreeMap的区别

集合工具类Collections

Collection 和 Collections的区别

数组工具类 Arrays


集合简介

集合框架是?:

        用于存储数据的容器

特点

  • 对象封装数据,对象多了也需要存储。集合用于存储对象。

  • 对象的个数确定可以使用数组,对象的个数不确定的可以用集合。因为集合是可变长度的。

集合和数组的区别

  • 数组是固定长度的;集合可变长度的。

  • 数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。

  • 数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。

使用集合框架的好处

  • 容量自增长;
  • 提供了高性能的数据结构和算法,使编码更轻松,提高了程序速度和质量;
  • 允许不同 API 之间的互操作,API之间可以来回传递集合;
  • 可以方便地扩展或改写集合,提高代码复用性和可操作性。
  • 通过使用JDK自带的集合类,可以降低代码维护和学习新API成本。

集合框架关系图

Collection接口

所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。

  • Collection一次存一个元素,是单列集合;
  • Map一次存一对元素,是双列集合。Map存储的一对元素:键–值,键(key)与值(value)间有对应(映射)关系。

Collection集合主要有List和Set两大接口

  • List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
  • Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素。必须保证元素唯一性。

List集合

List集合特点:

        List是元素有序并且可以重复的集合。

List的主要实现:

        ArrayListLinkedList Vector

1、UML

  • 含义:UML建模技术是一种建模语言,指用模型元素来组建整个系统的模型,模型元素包括系统中的类、类和类之间的关联、类的实例相互配合实现系统的动态行为等。
  • 类型:常用两种是类图、用例图,其中类图容易体现父子之间的关系,最主要得的思想是分门别类的方法。

遍历方式: 

  • 下标
  • foreach(>=jdk1.5)
  • 迭代器Iterator(原理)
        List lst=new ArrayList();
		lst.add("zs");
		lst.add("ls");
		lst.add("ww");
		lst.add("zs");

        //jdk1.8新特性
		lst.forEach(System.out::println);
		
		//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());
		}

List删除方式(3种+1)

  • for正向删除
  • for逆向删除
  • iterator(推荐)
  • clear 清空
        List lst=new ArrayList();
		lst.add("zs");
		lst.add("ls");
		lst.add("ww");
		lst.add("zs");

		System.out.println("删除之前的List集合大小:"+lst.size());
		//第一次删除:i=0 lst.remove(0) a 4
		//第二次删除:i=1 lst.remove(1) c 3
		//第三次删除:i=2  2<2
        System.out.println("---------1) for(正向删除)---------");
		int len=lst.size();
		for (int i = 0; i <len; i++) {
			lst.remove(0);
		}

        System.out.println("---------2) for(逆向删除)---------");
		int lens=lst.size()-1;
		for (int i = lens; i>=0; i--) {
			lst.remove(i);
		}

        System.out.println("---------3)iterator(迭代器)---------");
		//获取迭代器
		ListIterator its = lst.listIterator();
		while(its.hasNext()) {
			//注:先移动下标,再删除元素
			its.next();
			its.remove();
		}

        System.out.println("---------4) clear(清空)---------");
		lst.clear();
		System.out.println("删除之后的List集合大小:"+lst.size());

List优化

   核心概念:

  • 初始化容量:10
  • 负载因子(扩容比例):1.5
  • 计算公式:当前容器大小*负载因子(向下取整)

第一次:10*1.5=15
第二次:15*1.5=22
第三次:22*1.5=33

	public static void main(String[] args) {
		List lst=new ArrayList();
		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集
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值