泛型的练习

本文介绍了Java中泛型在集合类如Set和Map中的使用,强调了泛型在确保数据类型安全和提高代码可读性方面的重要性。通过示例展示了如何使用泛型创建自定义比较器,以及如何在List中包含Map作为元素。同时,还讲解了自定义泛型类Person及其使用方式。
摘要由CSDN通过智能技术生成
package com.hrf.demo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

public class GenericityTest {
//	写集合的时候必须使用泛型

	public static void main(String[] args) {
		// 使用泛型,如果类型不匹配,会在编译器出现错误,如果不用泛型,不容易发现错误
		
//		采用泛型来改善自定义比较器
		Person p1 = new Person("战三", 13);
		Person p2 = new Person("李四", 11);
		Person p3 = new Person("王五", 17);

//		2.集合,jdk1.8中前面写泛型,后面可以不用写
		Set<Person> set = new TreeSet<>((x,y)->x.getAge()-y.getAge());
//		1.
//		Set<Person> set = new TreeSet<>();
		set.add(p1);
		set.add(p2);
		set.add(p3);
//		输出
		System.out.println(set);
//		3.使用泛型操作map集合
		Map<Integer, String> map = new HashMap<>();
		map.put(1, "a");
		map.put(2, "b");
//		输出
		System.out.println(map);
//		4.List集合里面有Map集合,集合作为集合的元素类型
		List<Map<String, Object>> list2 = new ArrayList<Map<String,Object>>();
//		创建map
		Map<String, Object> map2 = new HashMap<>();
		map2.put("1001", 1001);
		
		list2.add(map2);
		System.out.println(list2);
		
//		5.自定义泛型
//		使用是确定类型
		Person<Integer> person = new Person<>();
		person.setAge(12);
		
	}
	
//	如果不知道age是什么类型可以用泛型Type,泛型的标志符没有限制,只有符合Java命名规范即可,最好和jdk的泛型标识一样
	static class Person<T> {
		private String name;
		private T age;
		
		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public T getAge() {
			return age;
		}

		public void setAge(T age) {
			this.age = age;
		}

		public Person() {
			super();
		}

		public Person(String name, T age) {
			super();
			this.name = name;
			this.age = age;
		}

		@Override
		public String toString() {
			return "Person [name=" + name + ", age=" + age + "]";
		}
	}
	
//	static class Person {
//		private String name;
//		private Integer age;
//		public Person(String name, Integer age) {
//			super();
//			this.name = name;
//			this.age = age;
//		}
//		public Person() {
//			super();
//		}
//		public String getName() {
//			return name;
//		}
//		public void setName(String name) {
//			this.name = name;
//		}
//		public Integer getAge() {
//			return age;
//		}
//		public void setAge(Integer age) {
//			this.age = age;
//		}
//		@Override
//		public String toString() {
//			return "Person [name=" + name + ", age=" + age + "]";
//		}
//	}
	
//	1.
//	static class Person implements Comparable<Person>{
//		private String name;
//		private Integer age;
//		public Person(String name, Integer age) {
//			super();
//			this.name = name;
//			this.age = age;
//		}
//		public Person() {
//			super();
//		}
//		public String getName() {
//			return name;
//		}
//		public void setName(String name) {
//			this.name = name;
//		}
//		public Integer getAge() {
//			return age;
//		}
//		public void setAge(Integer age) {
//			this.age = age;
//		}
//		@Override
//		public String toString() {
//			return "Person [name=" + name + ", age=" + age + "]";
//		}
//		@Override
//		public int compareTo(Person o) {
//			return age - o.getAge();
//		}
//	}	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值