第一章 集合框架和泛型(二)

本文详细介绍了Java集合框架中的Set接口及其实现类HashSet,包括其无序不重复的特性以及元素的获取方法。此外,还讲解了Map接口,特别是HashMap的特性和数据结构,以及如何通过键值对获取Map集合中的元素。最后,提到了Collections工具类的一些常用方法,如addAll(), copy(), fill()和sort(),并强调了Comparable接口在排序中的作用。
摘要由CSDN通过智能技术生成

Java高级特性

第一章 集合框架和泛型(二)

一、Set接口

Set集合称之为散列表,其存储元素时,会根据元素自身的特性,将其在Set集合中挑选一个合适的位置进行存储。当多个元素所存储的位置相同时,后面的元素会覆盖前面的元素内容。

Set集合的最大特征:无序不重复。

二、HashSet 类

HashSet是Set接口常用的实现类。

1、HashSet类的常用方法

在这里插入图片描述

2、如何获取Set集合中的元素

(1)对于Set集合来说,最大的特征就是无序,因此当存放多个相同元素时,Set集合只保留相同元素中的最后一个。
(2)由于Set集合是无序的,那么就无法通过下标来获得Set集合中的元素。
(3)要获得Set集合中的元素,只能通过循环结构进行遍历,逐一判断。
这里提供三种方法:
第一种:
由于普通的for循环需要通过下标来获得元素,那么Set集合是无法使用的,此时借助foreach循环结构。

        // 创建 HashSet 集合
		HashSet<String> hashSet = new HashSet<String>();
		// 通过 size() 能够获得该 HashSet 集合中所存储元素的个数
		System.out.println("此时 HashSet 中所存储的元素个数:" + hashSet.size());
		// 向 HashSet 中存放元素,通过 add() 实现
		hashSet.add("张三");
		hashSet.add("里斯");
		hashSet.add("王五");
		for (String name : hashSet) {
			System.out.println(name);
		}

第二种:
由于List集合和Set集合都来自于Collection接口,因此可以直接借助于构造方法。

List<String> list = new ArrayList<String>(hashSet);
for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
}

第三种:
使用迭代器(Iterator)实现对集合的遍历。

  • 将Set集合中所有的元素存入到Iterator对象中
Iterator<String> iterator = hashSet.iterator();
  • 由于元素的个数不止一个,因此使用循环结构来进行,因为循环次数不确定,且元素可能不存在,因此采用while循环。
while (iterator.hasNext()) {
			// 如果 iterator.hasNext() 有元素,那么取出该元素
			String name = iterator.next();
			System.out.println(name);
}

hasNext()方法用于判断此时迭代器中是否有元素,返回true则说明有元素,否则返回false,说明没有元素。
next()返回要访问的下一个元素。

注:凡是有Collection接口派生而来的接口或者类,都实现了iterate()方法,iterate()方法返回一个Iterator对象。

三、Map接口

1、概述

有别于Collection,Map在存储元素时,是成对存入的,即以“键值”的形式存入的。可以通过键(key)来获取值(value)。Map集合的key采用了类似于Set集合的形式,也就是说Map集合的key是不允许重复的,value允许重复。

2、HashMap类

最常用的Map实现类是HashMap,其优点是查询指定元素时效率较高。

3、Map接口的数据结构特征(源码)

(1)Map集合的初识容量是16。
在这里插入图片描述
(2)Map集合的最大容量是1073741824。
在这里插入图片描述
(3)Map集合的每次扩容都是在原来的基础上增加0.75倍。
在这里插入图片描述
补充:
本质上,HashSet集合使用的是一个HasMap类型的key,而value则统一是new Object()。
在这里插入图片描述

4、Map接口的常用方法

在这里插入图片描述

5、如何获取Map集合中的元素

方法1:通过迭代器Iterator实现遍历
方法2:增强型for循环
方法3:键值对

// 由于 HashMap 中是通过 key 来获取 value 的,那么如果能够循环每一个 key,就能够获得对应的 value。要想循环 HashMap 的 key,则可以将 Map 集合的 key 独立取出,形成一个 Set 集合。
Set<String> keySet = hashMap.keySet();
// 那么就可以对这个 Set 集合进行循环遍历
for (String key : keySet) {
	System.out.println(key + " : " + hashMap.get(key));
}

四、Collections算法类

Collections是Java提供的一个集合操作工具类,它包含了大量的静态方法,用于实现对集合元素的排序、查找、替换等操作。

1、Arrays工具类

借助于Arrays.aList()方法可以将数组转化为集合。

List<String> nameList = Arrays.asList("张三", "里斯", "王五");
2、Collections工具类

(1)addAll()

	// 使用addAll()将所给定的元素插入集合中
		Collections.addAll(arrayList, "张三", "里斯", "白王五", "赵六");

(2)copy()

	// 使用 copy() 进行元素的复制
		ArrayList<String> nameList = new ArrayList<String>();
		Collections.addAll(nameList, "", "", "", "");
		Collections.copy(nameList, arrayList);

(3)fill()

//使用 fill()将 List 集合中每个元素的值都用统一的值进行替换
		Collections.fill(nameList, "张大");

(4)sort()

		// 使用 sort() 实现对集合从小到大排序
		Collections.sort(arrayList);
  • 在Java中,如果想要实现一个类的对象之间比较大小,那么这个类就需要实现Comparable接口
  • 此接口强行对实现它的每个类的对象进行整体排序,这排序被称为类的自然排序,类的compareTo()方法被称为它的自然比较方法。此方法用于比较此对象与指定对象的顺序,如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
  • compareTo()方法的定义语法格式:
    int compareTo(Object obj );
    其中:obj是要比较的对象;
    返回值:负整数、零或正整数,根据此对象是小于、等于还是大于指定对象返回不同的值。
  • 实现此接口的对象列表(和数组)可以通过Collections.sort()方法(和Arrays.sort()方法)进行自动排序。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值