Collections类

本文详细介绍了Java中的Map接口和泛型的概念及其应用,展示了如何使用泛型来确保集合元素的安全性和稳定性。此外,还讲解了Collections工具类的常用方法,包括排序、查找、反转等操作,并通过示例代码演示了这些方法的用法。同时,文章通过Student类实现了Comparable接口,展示了自定义比较规则进行排序的例子。
摘要由CSDN通过智能技术生成

java的Map接口

Collections类

泛型

如何解决强制类型转换时容易出现的异常问题呢?JDK5.0开始使用泛型改写了集合框架中的所有接口和类

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

//创建学员集合
ArrayList<Student> students = new ArrayList<Student>();
//创建学员类对象
Student student = new Student();
//创建诗类对象
Poem poem = new Poem();
//将两个对象添加到list集合中
students.add(student);
students.add(poem);

ArrayList添加泛型后的代码如下:

package cn.zhz.Test;
//对新闻标题的存储和操作

import java.util.ArrayList;
import java.util.Iterator;

import cn.zhz.Kind.NewsTitle;

//对新闻标题的存储和操作
public class NewsMgr {
    public static void main(String[] args) {
        // 创建新闻标题对象
        NewsTitle title1 = new NewsTitle(1, "北京热门景点故宫", "author");
        NewsTitle title2 = new NewsTitle(2, "北京热门景点长城", "author");
        NewsTitle title3 = new NewsTitle(3, "北京热门景点北海", "author");
        NewsTitle title4 = new NewsTitle(4, "北京热门景点颐和园", "author");
        NewsTitle title5 = new NewsTitle(5, "北京热门景点天安门", "author");
        // 创建集合对象,并且将新闻标题加入到集合中去
        ArrayList<NewsTitle> list = new ArrayList<NewsTitle>();
        list.add(title1);// 等同于数组中的list[0] = title1;
        list.add(title2);
        list.add(title3);
        list.add(title4);
        list.add(title5);
        //泛型约束了集合框架添加元素的安全性,错误的元素添加,在编译时不通过
//        list.add("aaa");
        // 获取新闻标题的总数
        // ArrayList的size()方法等同于数组的length属性的作用
        System.out.println("新闻标题一种有" + list.size() + "条记录");
        System.out.println("************************************");
        // 逐条打印新闻标题的名称
        // 方法一:遍历ArrayList元素的位置(下标)
        for (int i = 0; i < list.size(); i++) {
            NewsTitle title = list.get(i);// 等同于list[i],返回的是Object
            System.out.println(title.getTitle());
        }
        System.out.println("************************************");
        // 方法二:增强型的for循环
        for (NewsTitle title : list) {
            System.out.println(title.getTitle());
        }
        //方法三:迭代器Iterator
        //获取迭代器对象
        Iterator<NewsTitle> iterator = list.iterator();
        //判断是否存在下一个元素
        while (iterator.hasNext()){
            //返回将要访问的下一个元素
            NewsTitle title = iterator.next();
            System.out.println(title.getTitle());
        }
    }
}

HashMap添加泛型后的代码如下:

package cn.zhz.Test;

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

public class CountriesInfo {
    public static void main(String[] args) {
        //创建集合对象,将国家的信息键值对放置到集合中
        Map<String, String> countries = new HashMap();
        countries.put("China", "中国");
        countries.put("USA", "美国");
        countries.put("Japan", "日本");
        countries.put("France", "法国");
        //获取集合中存储元素的个数(返回的是键值对的个数)
        System.out.println(countries.size());
        //获取集合中特定的key对应的value--Object返回值类型,需要进行强制类型转换
        String country = countries.get("China");
        System.out.println(country);
        //获取集合中特定的key对应的value,如果找不到,则返回null
        String country2 = countries.get("Australia");
        System.out.println(country2);
        //判断集合中是否存在某一个国家
        System.out.println("国家列表中是否存在China\t" + countries.containsKey("China"));
        System.out.println("国家列表中是否存在Australia\t" + countries.containsKey("Australia"));
        //删除某个特定的key对应的键值对
        System.out.println("国家列表中是否存在USA\t" + countries.containsKey("USA"));
        countries.remove("USA");
        System.out.println("国家列表中是否存在USA\t" + countries.containsKey("USA"));
        System.out.println(countries.size());
        //获取键的集合
        System.out.println(countries.keySet());
        //获取值的集合
        System.out.println(countries.values());
        //获取键值对的集合
        System.out.println(countries);
        //遍历Map-->思路一:遍历key(Set),通过key找到value
        Set<String> keys = countries.keySet();//获取到Map中的所有的key
        //方法一:增强型for遍历key的集合(Set)
        for (String key : keys) {
            String value = countries.get(key);//根据Map中的每一个key获取对应的value
            System.out.println(key + "--" + value);
        }
        //方法二:迭代器Iterator遍历key的集合(Set)
        Iterator<String> itor = keys.iterator();
        while (itor.hasNext()) {
            String key = itor.next();//获取到Map中的每一个key
            String value = countries.get(key);//根据Map中的每一个key去获取对应的value
            System.out.println(key + "--" + value);
        }
        //遍历Map 思路二:获取Map中的所有的键值对,然后在键值对中分别获取key和value
        Set<Map.Entry<String, String>> set = countries.entrySet();//获取Map中的键值对
        //遍历键值对的集合,把每一个键值对(obj)--Map.Entry(键值对的类型)拿出来
        for (Map.Entry<String, String> me : set) {
            String key = me.getKey();//获取键值对中的键
            String value = me.getValue();//获取兼职对中的值
            System.out.println(key + "--" + value);
        }
    }
}

泛型集合可以约束集合内的元素类型,泛型集合中的数据不再转换为Object类型了。

Collections的常用方法

java的集合框架将针对不同数据结构算法的实现都保存在工具类中,Collections类定义了一系列用于操作集合的静态方法
在这里插入图片描述

需要注意的是Collections和Collection不同,Collections是集合的操作类,Collection是集合的接口

  • Collections提供的常用的静态方法

    sort()排序

    binarySearch()查找

    max() min() 查找最大或者是最小值

    reverse()反转元素顺序

在这里插入图片描述

package cn.zhz.Test;

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

public class CollectionsUseDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("ant");
        list.add("bear");
        list.add("pen");
        list.add("zoo");
        list.add("apple");
        list.add("candy");
        for(String s:list){
            System.out.println(s);
        }
        //使用Collections进行升序排列
        Collections.sort(list);
        for(String s:list){
            System.out.println(s);
        }
        //查找集合元素的最大和最小值
        System.out.println("集合中的最大值"+Collections.max(list));
        System.out.println("集合中的最小值"+Collections.min(list));
        //查找集合中的特定元素
        System.out.println(Collections.binarySearch(list,"candy"));
        Collections.reverse(list);
        for(String s:list){
            System.out.println(s);
        }
    }
}

Collections排序

Collections类可以对集合进行排序 查找 替换的操作,实现一个类的对象之间比较大小,该类要实现Comparable接口,重写compareTo()的方法去自定义比较规则。

package cn.zhz.Kind;

//声明一个学生类:包含姓名和性别
public class Student implements Comparable {
    private int no;
    private String name;
    private String sex;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }

    public Student() {
    }


    public Student(int no, String name, String sex) {
        this.name = name;
        this.sex = sex;
        this.no = no;
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

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

    @Override
    //重写方法,定义学生对象的比较规则
    //比较规则:按照学号进行比较
    //比较对象,当前学生对象(this)和Object o 进行比较
    public int compareTo(Object o) {
        Student student = (Student) o;
        if (this.no == student.no) {
            //学号相同,两个学生对象一样大
            return 0;
        } else if (this.no > student.no) {
            //当前学生对象学号大于比较的学生对象
            return 1;
        } else {
            return -1;//这种是小于
        }
    }
}
package cn.zhz.Test;

import cn.zhz.Kind.Student;

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

public class CollectionsUseDemo01 {
    public static void main(String[] args) {
        List<Student> list = new ArrayList<Student>();
        Student stu1 = new Student(1,"张三","男");
        Student stu2 = new Student(7,"李四","男");
        Student stu3 = new Student(3,"王五","女");
        Student stu4 = new Student(9,"王小华","女");
        list.add(stu1);
        list.add(stu2);
        list.add(stu3);
        list.add(stu4);
        for (Student student:list){
            System.out.println(student.getNo()+"-"+student.getName()+"-"+student.getSex());
        }
        Collections.sort(list);
        for (Student student:list){
            System.out.println(student.getNo()+"-"+student.getName()+"-"+student.getSex());
        }
    }
}

java的IO

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq_45671732

你们鼓励将是我创作的最大动力!

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

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

打赏作者

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

抵扣说明:

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

余额充值