Java高级编程(集合&泛型)

本文详细介绍了Java集合框架,包括Collection接口、List、Set、Map及其遍历方式。探讨了Iterator迭代器和foreach循环的使用。接着,文章深入讨论了泛型的概念,其在数据结构中的应用,以及如何在类、接口和方法中使用泛型。同时,文章还涵盖了数据结构的基础知识,强调数据结构在优化程序设计中的重要性。
摘要由CSDN通过智能技术生成

Java集合

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

一、集合框架的概述

1.集合、数组都是对多个数据进行存储操作的结构,简称Java容器。
    说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt,.jpg,.avi,数据库中)

2.1 数组在存储多个数据方面的特点:
    > 一旦初始化以后,其长度就确定了。
    > 数组一旦定义好,其元素的类型就确定了。
        比如:String[] arr;int[] arr1;Object[] arr2(什么都能放);

2.2 数组在存储多个数据方面的缺点:
    > 一旦初始化以后,其长度就不可修改。
    > 数组中提供的方法非常有限,对于添加、删除、插入数据等操作,非常不便,同时效率不高。
    > 获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用。
    > 数组储存数据的特点是有序、可重复的;但对于无序、不重复数据的需求,不能满足。

.
.

二、集合框架

|----Collection接口:单列集合,用来存储一个一个对象
    |----List接口:存储有序的、可重复的数据。 --> “动态”数组(因为特点和数组很像,但长度可变)
        |----ArrayList、LinkedList、Vector
    |----Set接口:存储无序的、不可重复的数据。
        |----HashSet、linkedHashSet、TreeSet

|----Map接口:双列集合,用来存储一对(key -> value)一对的数据
    |----HashMap、linkedHashMap、TreeMap、Hashtable、Properties

Collection接口:
在这里插入图片描述
Map接口
在这里插入图片描述
.
.
.

Collection接口

1、Collection 接口是 List、Set 和 Queue 接口的父接口,该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合。
2、JDK不提供此接口的任何直接实现,而是提供更具体的子接口(如:Set和List)实现。
3、在 Java5 之前,Java 集合会丢失容器中所有对象的数据类型,把所有对象都当成 Object 类型处理;从 JDK 5.0 增加了泛型以后,Java 集合可以记住容器中对象的数据类型。(更严谨,是什么数据类型就装什么数据)

.
.

Collection 接口方法

1、添加
	add(Object e):将元素 e 添加到集合coll中
	addAll(Collection c):将 c 集合中的元素添加到当前的集合中
	
2、获取添加的元素个数
	int size()

3、清空集合
	void clear()

4、判断当前集合是否为空
	boolean isEmpty()

5、是否包含某个元素,在判断是会调用equals()方法来判断
	contains(Object obj):判断当前集合中是否包含obj
	containsAll(Collection c):判断形参 c 中的所有元素是否都存在于当前集合中

6、删除
	remove(Object obj):从当前集合中移除obj元素
	removeAll(Collection c):从当前集合中移除 c 中所有元素

7、交集:获取当前集合和 c 集合的交集,并返回给当前集合
	retainAll(Collection c)

8、判断两个集合中的元素是否相等(若是List接口则还要判断是否有序)
	equals(Object obj)

9、集合与数组(只限对象数组,不包括基本数据类型数组)间的转换
	toArray:集合 --> 数组
	数组 --> 集合:调用Arrays类的静态方法asList()
		注意:List arr1 = Arrays.asList(new int[]{123, 456});//这个只认为是一个数据,打印出的是地址值

10、获取集合对象的哈希值
	hashCode()

11、遍历
	iterator():返回迭代器(Iterator)对象,用于集合遍历

结论:
向Collection接口中实现类的对象中添加数据obj时,要求obj所在的类要重写equals()。

对于List而言:在使用 contains()、remove()、retainsAll()... 等方法时需要调用对应数据的equals()方法。
对于Set而言:
	(以HashSet、LinkedHashSet为例):它的不可重复性就是通过equals()和HashCode()方法去判断。
	(以TreeSet为例):它的不可重复性是通过Comparable()、Comparator()判断。

.
.

集合遍历:Iterator迭代器接口
1、Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。
2、Collection接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象。
3、Iterator 仅用于遍历集合,集合对象每次调用iterator()方法都得到一个全新的迭代器对象Iterator。(也就意味着指针会再次返回到集合第一个元素前面)!!!
.
.

Iterator的方法

hasNext():检测集合中是否还有元素,存在则返回true !!!
next():返回迭代器中的下一个元素 !!!

remove():将当前迭代器返回的元素删除(使用remove()时,迭代器的指针不能为初始位置(或重复使用remove()),否则会报IllegalStateException)
			遍历过程中是通过迭代器对象的remove方法,不是集合对象的remove方法。

		代码:
			    public static void main(String[] args) {
			        // 创建集合
			        ArrayList<String> data = new ArrayList<>();
			        data.add("Google");
			        data.add("IDEA");
			        data.add("Baidu");
			        // 获取迭代器
			        Iterator<String> iterator = data.iterator();
			        // hasNext 检查集合中是否还有元素,如果有则进入循环。
			        while (iterator.hasNext()){
			            String str = iterator.next();
			            //判断用next()方法返回的元素是否是"IDEA"
			            if("IDEA".equals(str)){
			                //将指针指向的元素删除
			                iterator.remove();
			            }else{
			                // 循环打印集合中的元素
			                System.out.println(str);
			            }
			        }
			    }

迭代器的执行原理
在这里插入图片描述
.
.

使用 foreach 循环遍历集合元素
Java 5.0 提供了 foreach 循环迭代访问 Collection和数组。
遍历集合的底层调用Iterator完成操作。
遍历操作不需获取Collection或数组的长度,无需使用索引访问元素。

格式:
		//for(集合元素的类型 局部变量 : 集合对象)
		for(Object obj : coll){
            System.out.println(obj);
        }
	
把集合对象 coll 的第一个元素赋给 obj 然后打印出来,在把第二个元素赋给 obj 再打印,以此类推。

面试代码:
	    public void test3(){
	        String[] arr = new String[]{"MM","MM","MM"};
	        //方式一:普通for循环:arr中元素改变
	//        for (int i = 0; i < arr.length; i++) {
	//            arr[i] = "GG";
	//        }
	
	        //方式二:foreach循环:ar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值