欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

集合框架--Map

程序员文章站 2022-04-12 22:10:01
Map接口Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作。HashMap是Map最常用的实现类常用方法Map常用方法演示:public class TestMap { public static void main(String[] args) { HashMap map = new HashMap(); map.put("CN", "*"); map.put("UK", "大不列颠联合王国");...

Map接口

Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作。HashMap是Map最常用的实现类

常用方法

集合框架--Map
Map常用方法演示:

public class TestMap {
    public static void main(String[] args) {
        HashMap map = new HashMap();
        map.put("CN", "*");
        map.put("UK", "大不列颠联合王国");
        map.put("US", "美利坚合众国");//增
        System.out.println(map.get("CN"));//查
        map.remove("US");
        System.out.println(map.get("US"));
        map.remove("CN", "ABC");//删
        System.out.println(map.get("CN"));
        map.containsKey("key");
        map.containsValue("key");
        map.put("CN", "中国");//改
        System.out.println(map.get("CN"));
        map.replace("CN", "*");
	}
}

Map的遍历

①通过迭代器Iterator实现遍历
②增强型for循环
③键值对

//遍历的方式
Set entry = map.entrySet();
for (Object o : entry) {
	System.out.println(o);
}
//遍历key的方式
Set keys = map.keySet();
Iterator itr=keys.iterator();
while(itr.hasNext()){
	System.out.println(itr.next());
}
//遍历value的方式
Collection values = map.values();
for (Object value : values) {
	System.out.println(value);
}     

泛型

无论是List的get(int index)方法获取元素,还是Map的get(Object key)方法获取元素,还是Iterator的next()方法获取元素,它们获取的都是Object类型,给我们带了不便,未解决此问题,可以使用泛型。
泛型:将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性。
示例:

ArrayList<String> list = new ArrayList<String>();
// 上述定义后,list只能存放String类型值,其他类型会编译报错
list.add("abc")//正确
list.add(1)// 编译报错

例题
利用map实现:
定义图书类Book,具有属性账号id,书名name、作者author 和价格price,
在创建图书对象时要求通过构造器进行创建,一次性将四个属性全部赋值,
1)要求账户属性是int型,名称是String型,作者是String型,价格是double,
请合理进行封装。
2)在Book类,添加toString方法,要求返回 图书信息字符串,使用\t隔开各信息
3)要求定义一个图书馆Library类,在图书馆类中添加一个集合用于保存多本图书
4)在图书馆类中要求能够新增图书
5)在图书馆类中要求可以查看所有添加过的图书
6)不允许添加重复的图书(如果账号id和书名name相同,则认为两本书是相同的)
(重写equals方法)

// Book类
public class Book  {
    private int id;
    private String name;
    private String author;
    private double price;

    public Book() {
    }

    public Book(int id, String bookName, String author, double price) {
        this.id = id;
        this.name = bookName;
        this.author = author;
        this.price = price;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return +id+"\t"+name+"\t"+author+"\t"+price;
    }
	// 重写equals()方法
    @Override
    public boolean equals(Object obj) {
        if(this == obj){
            return true;
        }
        if(obj instanceof Book){
            Book book = (Book)obj;
            if(this.id==book.id&&this.name.equals(book.name)){
                return true;
            }
        }
        return false;
    }
	// 重写hashCode()方法
    @Override
    public int hashCode() {
        int result = 17;
        result = result * 31 + this.id;
        result = result * 31 + this.name.hashCode();
        return result;
    }
}
// Library类
public class Library {
    Map<Integer,Book> map = new HashMap();
    public void insertBook(){
        Scanner sc = new Scanner(System.in);
        Integer i = 1;
        do{
            System.out.println("请输入编号:");
            int num = sc.nextInt();
            System.out.println("请输入图书名称:");
            String name = sc.next();
            System.out.println("请输入图书作者:");
            String author = sc.next();
            System.out.println("请输入图书价格:");
            double price = sc.nextDouble();
            Book book = new Book(num,name,author,price);
            map.put(i,book);
            System.out.println("是否继续输入(y/n):");
            String flag2 = sc.next();
            while (!flag2.equals("y")&&!flag2.equals("n")){
                System.out.println("输入有误,请输入(y/n):");
                flag2 = sc.next();
            }
            if(flag2.equals("n")){
                break;
            }
            i++;

        }while(true);
    }
    public void show(){
        System.out.println("图书信息:");

        Iterator iter = map.keySet().iterator();
        while(iter.hasNext()){
            Book book = (Book) map.get(iter.next());
            System.out.println(book);
        }
    }
}
// 测试类
public class TestLibrary {
    public static void main(String[] args) {
        Library library = new Library();
        library.insertBook();
        library.show();
    }
}

Collections的用法

Collections和Collection的区别:

Collections和Collection不同,前者是集合的操作类,后者是集合接口

Collections提供的常用静态方法:

sort():排序
binarySearch():查找
max()\min():查找最大\最小值

public class TestCollection {
    public static void main(String[] args) {
        List list=new ArrayList();
        list.add("abc");
        list.add(123);
        list.add("hello");
        list.add(3.1415926);
        // 匿名内部类 
        Collections.sort(list, new Comparator<Object>() {
            @Override
            public int compare(Object o1, Object o2) {
                return -1;
            }
        });
        System.out.println(list);
	}
}

本文地址:https://blog.csdn.net/jiandanbuguo/article/details/107677278