JavaAPI-Set集合和Map集合

目录

一、帮助类

二、Set集合

三、Map集合


一、帮助类

1.集合的帮助类:Collections

(1)Collections是集合的帮助类,他的里面有一堆的静态的方法

(2)比如排序,反转,求最大值等等

  • 排序方法的使用
  • 方法一:Collections.sort(集合名);
  • 方法二:当需要排序的是集合中保存的是类的时候,我们就需要自己写一个排序规则(比较器),比较器需要实现Comparator接口
  • 如:按年龄排序
  • // 比较器
    public class AgeComparator implements Comparator {
        @Override
        public int compare(Object o1, Object o2) {
            Student s1 = null;
            Student s2 = null;
            if(o1 instanceof Student){
                s1 = (Student) o1;
            }
            if(o2 instanceof Student){
                s2 = (Student) o2;
            }
            if(s1 != null && s2 != null){
                return s1.getsAge() - s2.getsAge();
            }
            return 0;
        }
    }
    
    public class Demo {
        public static void main(String[] args) {
            ArrayList<Student> list = new ArrayList<Student>();
            list.add(new Student(1,"James爱学习",26,99));
            list.add(new Student(2,"余悸",20,90));
            list.add(new Student(3,"朱兴康",21,95));
            list.add(new Student(4,"贺耀东",23,98));
            list.add(new Student(5,"富婆",24,92));
            //利用比较器排序
            Collections.sort(list,new AgeComparator());
        }
    }

2.数组的帮助类:Arrays

(1)Arrays是数组的帮助类,和Collections类似

二、Set集合

1.集合的特点

(1)List集合中存储的值是可以重复的,并且是有序的;

(2)Set集合中存储的值是不可以重复的,并且是无序的,但是也可以说它是有序的;

2.Set集合为什么是无序的

(1)Set集合是无序的主要是因为Set集合中的数据不是按添加的顺序排序的,不能通过下标去查找。

3.Set集合为什么是有序的

(1)Set集合是有序的主要是因为Set集合自带一个排序的规则,存入到Set集合中的数据会按它的排序规则自动排序。

4.Set集合的打印方式

(1)方式一:使用foreach循环

Set set = new HashSet();
set.add(3);
set.add(5);
set.add(2);
for (Object o : set) {
	System.out.print(o + " ");
}

(2)方式二:使用迭代器(iterator)

  • 迭代器可以看作是循环的一种
  • 格式
  • Set set = new HashSet();
    set.add(3);
    set.add(5);
    set.add(2);
    // 迭代器  -->>  循环的一种
    Iterator iterator = set.iterator();
    while (iterator.hasNext()){
    	System.out.print(iterator.next());
    }

5.因为Set集合中不能保存重复的值,所以如果添加了重复的值,是覆盖了还是不能添加进去,怎么验证

(1)将两个不同的类变为同一个,欺骗Java虚拟机

  • 原理:比较两个对象是否相同,首先会比较他们的hashCode是否相同,如果相同就会继续使用equals方法,如果equals方法返回为true,则这两个对象才是相同的。
  • 实现方法:使用hashCode和equals方法,将hashCode的返回值设置为相同的,将equals的返回值设置为true。
  • public class Cat {
        @Override
        public int hashCode() {
            return 1;
        }
    
        @Override
        public boolean equals(Object obj) {
         return true;
        }
    }
    
    public class Dog {
        @Override
        public int hashCode() {
            return 1;
        }
    
        @Override
        public boolean equals(Object obj) {
            return true;
        }
    }

(2)不能添加进去

(3)使用的是外面的对象的equals方法比较里面的对象

(4)验证过程

public class Cat {
    @Override
    public int hashCode() {
        return 1;
    }

    @Override
    public boolean equals(Object obj) {
        return true;
    }
}

public class Dog {
    @Override
    public int hashCode() {
        return 1;
    }

    @Override
    public boolean equals(Object obj) {
        return false;
    }
}

public class Demo {
    public static void main(String[] args) {
        Cat c = new Cat();
        Dog d = new Dog();
        Set set = new HashSet();
        set.add(d);
        set.add(c);
        System.out.println(set.size());
        for (Object o : set) {
            System.out.println(o);
        }
    }
}

三、Map集合

1.Map集合是键值对的形式,值可以重复,但是键不可以重复

(1)格式:

Map map = new HashMap();
map.put(123,456);

2.Map集合的查找是通过键去找值

3.键和值是可以迭代的

(1)键迭代出来的是一个Set集合(不能重复)

(2)值迭代出来的是一个Collection集合(可以重复)

4.获取Map集合的大小

(1)集合名.size()

Map map = new HashMap();
map.put(123,456);
System.out.println(map.size());

5.Map集合的添加元素和获取元素

(1)添加:集合名.put(键,值);

(2)获取:集合名.get(键);

6.获取全部的值或者全部的键

(1)获取全部的值:集合名.values()

Collection values = map.values();
for (Object o : values){
	System.out.println(o);
}

(2)获取全部的键:集合名.keySet()

Set set = map.keySet();
for (Object o : set){
    System.out.println(o + "\t" + map.get(o));
}

(3)行:集合名.entrySet()

  • entrySet是行迭代,我们通常会使用entrySet方法迭代,它的迭代类型属于行类型,它的效率是最高的。
  • Map map = new HashMap();
    map.put(123,456);
    Set<Map.Entry> set = map.entrySet();
    Iterator<Map.Entry> iterator = set.iterator();
    while (iterator.hasNext()){
    	Map.Entry next = iterator.next();
    	System.out.println(next.getKey() + "\t" + next.getValue());
    }

7.HashMap和HashTable的区别

(1)HashMap可以保存null值,但是HashTable不可以;

(2)HashMap比HashTable存储速度更快,但是HashTable比HashMap更安全;

(3)HashTable中的contains方法在HashMap中已经取消;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

所愿ღ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值