JAVA核心编程之泛型和Collections

5 泛型和Collections

5.1 泛型
5.1.1 泛型定义

​ 将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性

5.1.2 泛型集合
  • ​ 泛型集合可以约束集合内的元素类型
  • ​ 典型泛型集合ArrayList、HashMap<K,V>
    ​ 、<K,V>表示该泛型集合中的元素类型
    ​ 泛型集合中的数据不再转换为Object

示例:

package cn.bdqn.demo03;

public class Student {

	private String name;
	private String gender;

	public Student() {
		super();
	}

	public Student(String name, String gender) {
		super();
		this.name = name;
		this.gender = gender;
	}

	public String getName() {
		return name;
	}

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

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", gender=" + gender + "]";
	}

}
package cn.bdqn.demo03;

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

public class HashMapDemo02 {

	public static void main(String[] args) {
		// 准备容器:创建HashMap对象
		HashMap<String,Student> hm = new HashMap<String, Student>();

		// 准备数据:创建3个学生对象
		Student stu1 = new Student("张三", "男");
		Student stu2 = new Student("李四", "男");
		Student stu3 = new Student("如花", "女");
		
		//将学生对象存储到集合中
		hm.put("Jack", stu1);
		hm.put("Bob", stu2);
		hm.put("lisa", stu3);
		
		//通过英文名称,获得该学员对象的详细信息
		Student student =hm.get("lisa");
		System.out.println(student);
		System.out.println("lisa对应的学员姓名是:"+student.getName()+",性别:"+student.getGender());
		
		
		System.out.println("------------------------------");
		
		//需求:使用3种方式,将集合中所有学员的详细信息遍历出来
		Set<String> keys =hm.keySet();
		for(String key :keys){
			//获取值
			Student stu =hm.get(key);
			System.out.println(key+"对应的学员姓名是:"+stu.getName()+",性别:"+stu.getGender());
		}
		
		System.out.println("------------------------------");
		
		Iterator<String> it =keys.iterator();
		while(it.hasNext()){
			//获取键
			String key =it.next();
			//获取值
			Student stu =hm.get(key);
			System.out.println(key+"对应的学员姓名是:"+stu.getName()+",性别:"+stu.getGender());
		}
		
		System.out.println("------------------------------");
		
		Set<Map.Entry<String, Student>> keyValue = hm.entrySet();
		for(Map.Entry<String,Student> me:keyValue){
			//获取键
			String key =me.getKey();
			//获取值
			Student stu=me.getValue();
			System.out.println(key+"对应的学员姓名是:"+stu.getName()+",性别:"+stu.getGender());
		}

	}

}
5.1.3 使用泛型的好处

1.编译时,检查元素添加的类型,提高了安全性。

2.减少了类型转换的次数,提高了安全性。

3.不再提示安全警告。

5.2 Collections算法类
  • Java集合框架将针对不同数据结构算法的实现都保存在工具类中
  • Collections类定义了一系列用于操作集合的静态方法
5.2.1 Collections类常用方法

(1)Collections和Collection不同,前者是集合的操作类,后者是集合接口
(2)Collections提供的常用静态方法

  • sort():排序
  • binarySearch():查找
  • max()\min():查找最大\最小值
package cn.bdqn.demo04;![在这里插入图片描述](https://img-blog.csdnimg.cn/71c90d8cb01844d28a977e26aa74653a.jpeg#pic_center)


import java.util.ArrayList;
import java.util.Collections;

public class CollectionsDemo01 {

	public static void main(String[] args) {
		
		ArrayList<String> al = new ArrayList<String>();
		
		al.add("qwe");
		al.add("abc");
		al.add("rds");
		al.add("asd");
		al.add("kjh");
		al.add("dgt");
		
		//遍历集合
		for (String string : al) {
			System.out.println(string);
		}
		
		System.out.println("排序后");
		//集合元素升序排序
		Collections.sort(al);
		for (String string : al) {
			System.out.println(string);
		}
		
		
		//查找元素,注意。查找元素之前集合要进行升序排序,否则,不能保证查找结果的正确性
		int index =Collections.binarySearch(al, "abc");
		System.out.println(index);//0
		int index2 =Collections.binarySearch(al, "dsajfhjsadfh");
		System.out.println(index2);
		
		System.out.println(Collections.max(al));
		System.out.println(Collections.min(al));
	}

}
5.2.2 Collections排序
  • Collections类可以对集合进行排序、查找和替换操作
  • 实现一个类的对象之间比较大小,该类要实现Comparable接口

​ 重写compareTo()方法

package cn.bdqn.demo04;

public class Student implements Comparable<Student> {

	private String name;
	private int age;

	public Student() {
		super();
	}

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

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

	public int getAge() {
		return age;
	}

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

	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}

	@Override
	public int compareTo(Student student) {
		if(this.getAge()>student.getAge()){
			return 1;
		}else if(this.getAge()==student.getAge()){
			return 0;
		}else{
			return -1;
		}
	}

}
package cn.bdqn.demo04;

import java.util.ArrayList;
import java.util.Collections;

public class CollectionsDemo02 {

	public static void main(String[] args) {
		// 准备容器:创建集合对象
		ArrayList<Student> al = new ArrayList<Student>();

		// 准备数据:创建Student对象
		Student stu1 = new Student("张三", 22);
		Student stu2 = new Student("李四", 21);
		Student stu3 = new Student("王五", 25);
		Student stu4 = new Student("赵六", 20);
		Student stu5 = new Student("孙七", 26);

		// 将对象存储到集合中
		al.add(stu1);
		al.add(stu2);
		al.add(stu3);
		al.add(stu4);
		al.add(stu5);

		// 遍历集合
		for (Student student : al) {
			System.out.println(student);
		}

		// 对集合进行排序
		Collections.sort(al);

		// 遍历集合
		System.out.println("排序后:");
		for (Student student : al) {
			System.out.println(student);
		}

	}

}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值