Java集合

在这里插入图片描述

集合

在这里插入图片描述

集合和数组的区别

区别:

1、 数组的长度是固定的,集合的长度可以动态扩展
2、 数组只能存储相同数据类型的数据,而集合可以存储不同数据类型的数据。比如将arr数组中的数据3改为3.0变为double类型就会报错。而list中可以存储字符串和Integer类型的对象。

在这里插入图片描述

后面会学习到泛型的使用,如果为集合加上泛型,也就限制了集合中只能存储这一种数据类型的数据。如:下面的<>中定义了泛型类型为String,再去添加Integer类型数据时就会报错了。
在这里插入图片描述

3、 数组可以存储基本数据类型数据,也可以是引用类型,而集合只能是引用类型。这里需要说明一下,如下代码所示:1和基本数据类型变量n都可以被添加到集合中,并没有报错。注意这并不是因为集合中能存储基本数据类型数据,而是经过装箱操作,将基本数据类型转换为对应的包装器类对象了。
在这里插入图片描述

应用场景:

1、 数组适用于数据长度固定的情况,并且主要进行查询操作

2、 集合的应用场景如下:

无法预测存储数据的数量
同时存储具有一对一关系的数据
需要进行数据的增删
需要解决数据重复问题,可以直接使用集合Set完成

集合中接口和类的特点总结

一、 Collection

主要用于存储类的对象

Collection下有三个子接口,分别是List、Queue和Set,List和Queue中可以存储有序且重复的数据,Set中存储的数据是无序且不允许重复。

1、 List接口的主要实现类包括ArrayList和LinkedList,LinkedList同时实现了Queue接口

ArrayList的底层实现是数组,因此在内存中是连续存储的。查询速度快,但增加和删除速度慢。

LinkedList底层是基于双向链表的,增加和删除速度快,查询速度慢。

2、 Set接口的主要实现类有HashSet和TreeSet

HashSet是基于哈希表实现的,数据是无序的,HashSet元素可以是null,但只能有一个null。

TreeSet是基于二叉树实现的,可以实现数据的自动排序,确保集合元素处于排序状态,不允许放入空值。

HashSet的性能优于TreeSet,一般情况下建议使用HashSet,如果需要使用排序功能建议使用TreeSet

二、 Map

主要用于存储键值对的数据

Map的主要实现类包括HashMap和TreeMap,其中HashMap基于哈希表实现,TreeMap基于红黑树实现。

HashMap适用于在Map中插入、删除和定位元素

TreeMap适用于按自然顺序或自定义顺序对键值进行遍历

HashMap比TreeMap性能好,所以HashMap使用更多一些,如果需要对数据进行排序可以使用TreeMap

List(列表)

在这里插入图片描述

Set

在这里插入图片描述
set是接口,不能创建对象
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

hashCode和equals方法的作用

hashCode()方法用于给对象返回hash code值,equals()方法用于判断其他对象与该对象是否相等。为什么需要这两个方法呢?
我们知道HashSet中是不允许添加重复元素的,那么当调用add()方法向HashSet中添加元素时,是如何判断两个元素是不同的。这就用到了hashCode()和equals()方法。在添加数据时,会调用hashCode()方法得到hash code值,通过这个值可以找到数据存储位置,该位置可以理解成一片区域,在该区域存储的数据的hashCode值都是相等的。如果该区域已经有数据了,就继续调用equals()方法判断数据是否相等,如果相等就说明数据重复了,就不能再添加了。如果不相等,就找到一个位置进行存储。
这些是基于哈希算法完成的,它使得添加数据的效率得到了提升。假设此时Set集合中已经有两个100个元素,那么如果想添加第101个元素,如果此时没有使用哈希算法,就需要调用equals()方法将第101个元素与前100个元素依次进行比较,如果元素更多,比较所耗费的时间就越长。
如果两个对象相等,那么他们的hashCode值一定相等。反之,如果两个对象的hashCode值相等,那么这两个对象不一定相等,还需要使用equals()方法进行判断。
如果不重写hashCode()方法,默认每个对象的hashCode()值都不一样,所以该类的每个对象都不会相等。

插入重复数组时需要重写的equals方法在这里插入图片描述

@Override
	public boolean equals(Object obj) {
		if(this==obj) 
			return true;
		if(obj.getClass()==Student.class) {
			Student stu=(Student)obj;
			return stu.getName().equals(name)&&stu.getId()==(id)&&stu.getScore()==score;
		}
		return false;
	}

关于getClass()和.class的作用

在视频中我们看到了如下选中的if语句,其中的判断条件中用到了getClass()和.class,有的小伙伴还是会对这块内容产生疑问,下面就来说明一下:

首先,来看一下Class类。在Java中,万事万物皆对象,每个类都有一个相应的Class对象。通过Class类,可以获得一个类的基本信息,比如属性、方法和构造方法等。这些都属于Java反射的内容,在后面的课程中将会学习到。

getClass()是Object类的方法,该方法的返回值类型是Class类,通过getClass()方法可以得到一个Class类的对象。而.class返回的也是Class类型的对象。所以,如果obj.getClass()和Cat.class返回的内容相等,说明是同一个对象。
在这里插入图片描述
既然都可以得到Class的对象,关于getClass()和.class的区别:getClass()方法,有多态能力,运行时可以返回子类的类型信息。.class是没有多态的,是静态解析的,编译时可以确定类型信息。

在集合中查询信息:
在这里插入图片描述
在这里插入图片描述

Map

在这里插入图片描述


在这里插入图片描述
添加一个对象:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class FootBallDome {

	public static void main(String[] args) {
		Map<String,String> maps=new HashMap();
		maps.put("2014","德国");
		maps.put("2010","西班牙");
		maps.put("2006","意大利");
		maps.put("2002","巴西");
		//使用迭代器输出
		System.out.println("使用迭代器输出");
		Iterator<String> it=maps.values().iterator();
		while(it.hasNext()) {
			System.out.print(it.next()+"  ");
		}
		
		//使用EntrySet方式遍历输出HashMap中的key和value
		System.out.println();
		Set<Entry<String, String>> entry=maps.entrySet();
		for(Entry<String,String> en:entry) {
			System.out.print(en.getKey()+"-");
			System.out.print(en.getValue());
			System.out.println();
		}
		
	}

}

Map中获取key-value值的方法

Map<K,V> 集合是一种键值映射形式的集合。当调用put(K key,V value)方法把数据存到Map中后,那么如何把Map中的key值和value值取出来呢?都有哪几种取值的方法呢?下边就来一一介绍一下。

一、 前置准备

以HashMap为例,先为map中存几个数据,以便于后边对map的遍历取值。
在这里插入图片描述

二、 获取Map的key-value值。

获取Map的key-value值分别有以下几种方式,使用时可以根据不同的场景,选择对应的取值方式。

方法一:

同时获取Map中的key值和value值。

此方法通常用在要遍历展示这个map中所有的key和value

例如:
在这里插入图片描述

在主方法中调用这个获取key和value的方法:

在这里插入图片描述
控制台的显示如下:

在这里插入图片描述
方法二:

获取Map中的所有key值,以及通过key值获取对应的value值。

此方法可以用在一些需要判断是否是指定key的情况下,获取该key对应的value。

例如:

在这里插入图片描述
在主方法中调用这个获取key的方法:
在这里插入图片描述

控制台显示如下:
在这里插入图片描述

方法三:

获取Map中的所有value值,此方法通常用于只想要展示或获取所有的value值的情况。
在这里插入图片描述
判断key值在HashMap中是否存在,可以使用containsKey()方法,返回值是一个boolean类型。
判断HashMap:hsa的可以中是否包含元素word的值,如果包含,则找出来并把对应的value传递到success.jsp 中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值