集合框架及其背后的数据结构

1 Collection(接口)) 是用来存储管理一组对象objects,这些对象一般被称为元素elements
List(接口))(线性结构) 可以中间位置插入删除,其中的元素相对有序
Queue(接口) 元素相对有序,可以头插,头删,也可以尾插,尾删
Deque 双端队列 (接口) 是指两端都可以进行入队列和出队列操作
Set(接口)) 元素不要求顺序. 元素不能重复,1 2 3和1 3 2是相同的set.

Set:
TreeSet(类) 基于二叉搜索树实现(元素是无序的)
HashSet(类) 基于哈希表实现(元素是有序的)
Queue:
LinkedList(类)->Deque 链表
PriorityQueue(类) 不是简单的先进先出,而是由优先级决定
List :
Vector(类) 旧版本的顺序表,现在不常用
Stack(类) 栈,先进后出
ArrayList(类) 顺序表(数组的进阶版本)
LinkedList(类) 链表

2 Map(接口)) 存放的是一组键值对(当前互联网分布式系统的理论基础) Map中的key不能重复,可以通过key找到对应的value.
TreeMap(类) 基于二叉搜索树实现
HashMap(类) 基于哈希表实现(Hash这种思想方法很重要)
在这里插入图片描述
在这里插入图片描述
1 Collection接口说明:
(1) Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性.
(2) Collection包含了List和Set两大分支.
集合同数组的比较:
(1) 数组长度一旦固定,不能再改变,集合的长度是可以改变的。
(2) 数组只能保存相同类型的数据,集合可以保存指定类型或其子类型的数据。
(3) 数组在使用的时候相对比较麻烦,集合可以利用多种方法,还有工具类.
在这里插入图片描述

 public static void main(String[] args) {
        //1.创建Collection
        Collection<String> collection=new ArrayList<>();
        //泛型里的参数必须是引用类型,不能是内置类型,可以用包装类解决
        //2.使用size方法
        System.out.println(collection.size());
        //3.使用isEmpty方法
        System.out.println(collection.isEmpty());
        //4.使用add方法插入
        collection.add("我");
        collection.add("爱");
        collection.add("Java");
        System.out.println(collection);
        //5.再次使用size和isEmpty
        System.out.println(collection.size());
        System.out.println(collection.isEmpty());
        //6.可以toArray把Collection转化成数组
        //得到的结果是Object[]
        Object[] array=collection.toArray();
        System.out.println(Arrays.toString(array));
        //7.直接使用for循环遍历集合中的元素
        //(1) 用for each循环来写比较简单.
        for(String s:collection){
            //s就会指向collection中的每一个元素
            System.out.println(s);
        }
        //(2) 也可以使用迭代器
        Iterator<String> iterator = collection.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            System.out.println(next);
        }
        //8.使用contains方法判断元素是否存在
        System.out.println(collection.contains("我"));
        //9.使用remove来删除元素
        collection.remove("我");
        System.out.println("删除之后的:");
       for(String s:collection){
            System.out.println(s);
        }    
        //10.使用clear方法清空所有元素
        collection.clear();
        System.out.println(collection.size());
    }

2 Map接口:
在这里插入图片描述

 public static void main(String[] args) {
        //1.创建Map实例,泛型参数有两个,第一个参数是key的类型,第二个参数是value的类型
        //key value这种结构是为了跟据key找到对应的value
        Map<String, String> map = new HashMap<>();
        //2.使用size获取到元素个数(键值对个数)
        System.out.println(map.size());
        //3.使用isEmpty查看是否为空
        System.out.println(map.isEmpty());
        //4.使用put方法把一些键值对存放进去
        map.put("及时雨", "宋江");
        map.put("玉麒麟", "卢俊义");
        map.put("智多星", "吴用");
        map.put("入云龙", "公孙胜");
        map.put("及时雨","songjiang");
        //如果两个key值重复,后者value就会覆盖前者
        
        //5.使用get方法跟据key来查找对应的value,如果key不存在,返回null
        // getOrDefault如果key不存在,返回默认值
        System.out.println(map.get("及时雨"));
        System.out.println(map.get("玉麒麟"));
        System.out.println(map.get("大刀"));
        System.out.println(map.getOrDefault("行者", "武松"));
        //6.通过containsKey和containsValue判断某个值是否存在
        //containsKey执行效率高,containsValue执行效率低,不推荐
        System.out.println(map.containsKey("智多星"));
        System.out.println(map.containsValue("公孙胜"));

        //7.foreach遍历Map中所有的键值对
        // Entry:表示一个"条目",也就是一个键值对
        // map.entrySet获取到所有的键值对
        //Map中的元素和插入顺序无关,取决于具体的实现方式
        for (Map.Entry<String, String> x : map.entrySet()) {
                System.out.println(x.getKey() + ": " + x.getValue());
        }
        map.remove("入云龙");
        System.out.println("删除元素后:");
        //entrySet 就包括了keySet和valueSet.
        for (Map.Entry<String, String> x: map.entrySet()) {
                System.out.println(x.getKey() + ": " + x.getValue());
        }
        System.out.println(map);
        //也可以直接输出map
    } 

3 注意:
(1) 接口 不能直接实例化, 只能构造出 对应子类 的实例 (接口都有自己的实现类).
(2) 迭代器是专门用来遍历集合类的对象.
(3) 数组获取元素个数通过 .length不带括号
(4) 字符串获取字符个数通过 .length()带括号
(5) 集合获取元素个数通过 .size()带括号.

4 接口对应的实现类:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值