学点儿Java_Day10_集合框架(List、Set、HashMap)

发布于:2024-03-29 ⋅ 阅读:(18) ⋅ 点赞:(0)

1 简介

在这里插入图片描述
在这里插入图片描述

ArrayList: 有序(放进去顺序和拿出来顺序一致),可重复
HashSet: 无序(放进去顺序和拿出来顺序不一定一致),不可重复

	@Test
    public void test1() {
        String[] array = new String[3];
        //List: 有序 可重复
        //有序: 放入顺序 与  拿出顺序一致,就是有序
//        List<String> list = new ArrayList<>();//多态 声明成父类, new子类类型
        ArrayList<String> list = new ArrayList<>();
        list.add("Java");
        list.add("UI");
        list.add("H5");
        list.add("H5");
        list.add("Python");
        list.add("aa");
        for (String str : list) {
            System.out.println(str);
        }
        System.out.println("------------------");
        //Set:无序 不重复
        //无序: 放入顺序与拿出顺序不一定一致,可能不一致
        HashSet<String> set = new HashSet<>();
//        Set<String> set = new HashSet<>();//多态, 声明成父类, new子类类型
        set.add("Java");
        set.add("UI");
        set.add("H5");
        set.add("H5");
        set.add("aa");
        for (String str : set) {
            System.out.println(str);
        }
    }

2 ArrayList和LinkedList区别

在这里插入图片描述
ArrayList和LinkedList的大致区别如下:
1.ArrayList是实现了基于动态数组的数据结构LinkedList基于链表的数据结构
2.对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

ArrayList内部是使用可増长数组实现的,所以是用get和set方法是花费常数时间的,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动
LinkedList是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费常数时间。

jdk1.7版本之前创建集合对象必须把前后的泛型都写上
ArrayList<String> list = new ArrayList<String>();
jdk1.7版本之后,=号后面的泛型可以省略,后面的泛型可以根据前面的泛型推导出来
ArrayList<String> list = new ArrayList<>();

3 队列

Queue先进先出 FIFO Firt In First Out
客服电话、12306排队买票、滴滴打车
在这里插入图片描述

LinkedList linkedList = new LinkedList();
linkedList.addFirst("A");
linkedList.removeFirst();
linkedList.addLast("B");
linkedList.removeLast();

基于LinkedList的addFirst()removeFirst()addLast()removeLast()方法可以实现队列两种数据结构

4 Map

在这里插入图片描述
Set<Entry<String, String>> set = map.entrySet();
map.keySet();

Map接口
1、Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
2、Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
3、Collection中的集合称为单列集合,Map中的集合称为双列集合
4、需要注意的是,Map中的集合不能包含重复的键,值可以重复每个键只能对应一个值
5、Map中常用的集合为HashMap集合、LinkedHashMap集合。

Map集合遍历键找值方式:

一、键找值方式:即通过元素中的键,获取键所对应的值
1.获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键
在这里插入图片描述

2.遍历键的Set集合,得到每一个键
3.根据键,获取键所对应的值
在这里插入图片描述

二、Map集合遍历键值对方式
键值对方式:即通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。
操作步骤与图解:
1.获取Map集合中,所有的键值对(Entry)对象,以Set集合形式返回。
在这里插入图片描述

2.遍历包含键值对(Entry)对象的Set集合,得到每一个键值对(Entry)对象
3.通过键值对(Entry)对象,获取Entry对象中的键与值。
在这里插入图片描述
在这里插入图片描述

	@Test
    public void test2() {
        //Map<String, String> map = new HashMap<>();//多态, 声明成父类, new子类类型
        HashMap<String, String> map = new HashMap<>();//HashMap不是接口
        map.put("CN", "中国");
        map.put("US", "美国");
        map.put("UK", "英国");
        Set<Map.Entry<String, String>> set = map.entrySet();//entry Set集合
        //① 遍历map 转为遍历set
        for (Map.Entry<String, String> entry : set) {
            System.out.println(entry.getKey() + ": " + entry.getValue());//放入顺序和拿出顺序不一定一样
        }
        System.out.println("-----------------");
        //②
        String country = map.get("CN");
        System.out.println(country);
        System.out.println("-----------------");
        //key不能重
        //② 根据key遍历
        Set<String> ketSet = map.keySet();
        for (String key : ketSet) {
            System.out.println(key + ": " + map.get(key));
        }
    }

注意:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了

本文含有隐藏内容,请 开通VIP 后查看