集合(Collections,colletion(list,set),map)的区分

2021-05-30 09:53:04 星期日
接口和接口之间是继承,接口和类之间是实现。
List,Set,Map都重写了toStirng()方法,所以打印的是值,而不是地址值。

Collections

Collections 和Arrays(数组的工具类)一样是集合的工具类,用来对集合进行操作。
正因为是工具类,所以里面的方法是静态的,可以直接类名调用。
shuffle(List<?> list); 只能对list集合进行默认ASCII排序),list里面不能是实体类
sort(List<?> lis, Comparator); 自定义排序 ,list里面可以是实体类
addALL(集合名,元素1…元素2); 往集合最后面加0-N个元素

Comparator 比较器

是一个接口,利用实现类实现,重写int compare(T o1, T o2)方法。
return o1-o2(表示升序)
return o2-o1(表示降序)
例子:

package com.example.demo002.service;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.*;

public class test {
    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        Collections.addAll(list,new Person("01", 10), new Person("02", 66), new Person("03", 22));
        System.out.println(list);
        Collections.sort(list, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                // 前减后为升序,后减前为降序
                return o1.getAge() - o2.getAge(); // 此时是按照时间升序
            }
        });
        System.out.println(list);
    }
}

@Data
@NoArgsConstructor
@AllArgsConstructor
class Person {
    private String name;
    private int age;
}

查看原码我们可以知道Comparator接口被注解了@FunctionalInterface,所以时一个函数式接口,因此上面你都代码可以lombda简化成

// 方式一:
Collections.sort(list, (o1, o2) -> o1.getAge() - o2.getAge());
// 方式二:
Collections.sort(list, Comparator.comparingInt(Person::getAge));

Collection

Collection接口时单列集合的根接口,特点是有序,带索引,可重复。

###List集合
java.utils.List接口是继承了Collection接口;
ArrayList和LinkedList是List的实现类;
是有序,带索引,可重复

ArrayList 和 LinkedList 之间的区别

ArrayList
LinkedList

集合数据结构特点性能线程安全
ArrayList数组查询快,增删慢效率高线程不安全
LinkedList双向链表查询慢,增删快效率低线程安全

注意:
①ArrayList是数组结构,数组是定长的,默认为16长度,然后超过这个长度,就会System.copyof数组复制,从而ArrayList是不定长的。
②LinkedList,由于是双向链表结构所有,提供过了很多 首尾 的操作方法。
③在开发中,LinkedList也可以作为堆栈、队列的结构使用

Set集合

java.utils.Set接口是继承了Collection接口;
特点:无序,无索引,不重复(对于实体类,比较的也是值,值都相等那就是重复的,底层是hashmap,重写了equals和hashcode方法)
实现类有Hashset,LinkedHashSet,TreeSet (java.utils)
注意:
LinkedHashSet有序;

集合数据结构特点性能线程安全
实现类有HashsetHashMap(数组+链表+红黑树 = 哈希表)查询增删快效率高线程不安全
LinkedHashSet继承HashSet(哈希表+链表,从而有序了)查询增删快效率高线程不安全
TreeSet红黑树可以进行Comparator排序效率高线程不安全

这儿涉及了好几种数据结构,打击可以看我这篇文章。

Map

java.utils.map是双列集合的根接口(单双列结合知道是存储的格式,双列是存放映射的K-V格式)
注意键k一定是唯一的,值v可以重复
特点: 键唯一值可重复,无序(LinkedHashMap是有序的),没有索引
实现类有HashMap,LinkedHashMap,TreeMap (java.utils)

集合数据结构特点
HashMap数组(16/8扩容)+链表+红黑树 = 哈希表无序
LinkedHashMap是HashMap的子类,哈希表+链表有序
TreeMap红黑树可以进行Comparator排序

注意:
重写 equals() 和 hashCode() ,比较的是里面属性的值,不重写比较的就是对象的地址值。

MAP的遍历

查看这篇[1]map遍历

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LC超人在良家

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

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

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

打赏作者

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

抵扣说明:

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

余额充值