第六次 java实验 紫金学院 泛型01

这篇博客展示了如何使用Java的TreeSet和Comparator接口实现元素的自定义排序。示例代码创建了一个TreeSet,其中1到10的整数按照奇数在前偶数在后的规则排列,奇数升序,偶数降序。博客还介绍了Java的Iterator接口,用于遍历集合,并解释了Comparable和Comparator的区别以及它们在排序中的作用。
摘要由CSDN通过智能技术生成
  1. 使用TreeSet和Comparator,编写TreeSetTest2类,要求对TreeSet中的元素1-元素10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列。

Java Iterator(迭代器)

        Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。
        Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。
        调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
        调用 it.hasNext() 用于检测集合中是否还有元素。
        调用 it.remove() 将迭代器返回的元素删除。

Comparator

 Comparable & Comparator都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,
Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法或在集合内实现 Comparable接口的方法,
Comparator位于包java.util下,而Comparable位于包java.lang下。

int compare(T o1, T o2)

int compare(T o1, T o2)和上面的x.compareTo(y)类似,定义排序规则后返回正数,零和负数分别代表大于,等于和小于。

 1.intValue()是java.lang.Number类的方法,Number是一个抽象类。Java中所有的数值类都继承它。也就是说,不单是Integer有intValue方法,Double,Long等都有此方法。 
2.此方法的意思是:输出int数据。每个数值类中具体的实现是不同的。例如: Float类和Double类的intValue方法,就是丢掉了小数位,而Long的intValue方法又不一样的

package test06;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetTest {
    public static void main(String[] args) {
        TreeSet cc = new TreeSet(new MyComparator());
        for(int i = 1;i<=10;i++) {
            cc.add(new Integer(i));
        }
        /** Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。
        Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。
	        调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
		调用 it.hasNext() 用于检测集合中是否还有元素。
		调用 it.remove() 将迭代器返回的元素删除。
		*/
        Iterator it = cc.iterator();
        while(it.hasNext()) {
            System.out.print(it.next()+"  ");
        }
    }
}
/**Comparable & Comparator都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,
 * Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法或在集合内实现 Comparable接口的方法,
 * Comparator位于包java.util下,而Comparable位于包java.lang下。
*/
class MyComparator implements Comparator {
/**
 * int compare(T o1, T o2)和上面的x.compareTo(y)类似,定义排序规则后返回正数,零和负数分别代表大于,等于和小于。
 * */
    public int compare(Object o1, Object o2) {
    	/**
    	 * 1.intValue()是java.lang.Number类的方法,Number是一个抽象类。Java中所有的数值类都继承它。也就是说,不单是Integer有intValue方法,Double,Long等都有此方法。 
			2.此方法的意思是:输出int数据。每个数值类中具体的实现是不同的。例如: 
			Float类和Double类的intValue方法,就是丢掉了小数位,而Long的intValue方法又不一样的
    	 	*/
        int num1 = ((Integer) o1).intValue();
        int num2 = ((Integer) o2).intValue();
        int type1 = num1 % 2;
        int type2 = num2 % 2;
        if (type1 > type2) { 
        	return -1;
        	}
        else if (type1 < type2) {
        	return 1;
        }
        else {
            if (type1 == 0) {
            	//如果type1=0,则是偶数,需要从大到小排列,则比较num1、num2的大小,num1 > num2返回-1(判断为小于则先输出num2);num1 < num2返回1(判断为大于先输出num1)
                if (num1 > num2) return -1;
                else if (num1 < num2) return 1;
            } else if (type1 == 1) {
            	//如果type1=1,则是奇数,需要从小到大排列,则比较num1、num2的大小,num1 > num2返回1;num1 < num2返回-1
                if (num1 > num2) return 1;
                else if (num1 < num2) return -1;
            }
        }
        return 0;
    }
}

运行截图:

Java 集合框架是 Java 提供的一组接口和,用于存储和操作对象的集合。Java 集合框架提供了许多集合,包括 List、Set、Map 等,这些集合可以存储不同型的对象,如整数、字符串、自定义对象等。 泛型Java 的一个重要特性,它可以让我们编写更加可读性好、型安全的代码。泛型允许我们在编译时指定集合存储的元素型,并检查代码是否符合型安全原则。 下面是一个简单的 Java 集合和泛型的示例代码: ```java import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CollectionDemo { public static void main(String[] args) { // 创建一个 List 集合,并添加元素 List<String> list = new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("orange"); // 遍历 List 集合 for (String fruit : list) { System.out.println(fruit); } // 创建一个 Map 集合,并添加键值对 Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("orange", 3); // 遍历 Map 集合 for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); } } } ``` 在上面的代码,我们创建了一个 List 集合和一个 Map 集合,并使用泛型指定集合存储的元素型。然后我们使用 add 方法向 List 集合添加元素使用 put 方法向 Map 集合添加键值对。最后,我们使用 for 循环遍历集合,并输出集合元素和键值对。 使用 Java 集合和泛型可以让我们更加方便地存储和操作数据,同时也可以让代码更加易读易维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵相机~

谢谢你,调试、讲解私聊我~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值