集合、映射


一、集合

顶级接口是Collection,子接口List、Set、Queue

1. List

  • 有序、存储重复元素
  • ArrayList—底层基于数组实现,默认初始容量为10,且每次扩容一半。增删效率低,查询效率高
  • LinkedList—底层基于节点,通过地址值指向来维系节点。增删效率高,查询效率低
  • Vector—最早的集合类,底层基于数组实现,初始容量为10,每次扩容默认翻倍。
  • Stack—继承于Vector

2. Set

  • HashSet—底层基于数组+链表(HashMap),初始容量16,加载因子默认0.75,容量每次扩容翻倍。不能存储重复元素,且不能保证迭代顺序恒久不变(rehash)
  • LinkedHashSet—记录元素存储的位置。
  • TreeSet—可以对存储的元素进行排序(Comparable接口中重写compareTo)
  • 比较器—Comparator重写compare
  • 迭代器—底层根据指针挪动遍历(增强for循环底层 基于迭代器实现,是jdk1.5的新特性)
  • Queue—队列

二、泛型

参数化类型
jdk1.5的新特性

1. 泛型擦除(编译时期)

指定为具体类型之后支持操作指定类型的数据

2. 泛型上下限

  • <? extends 类/接口>---泛型可以指定为类以及子类/接口以及子接口
  • <? super 类/接口>---泛型可以指定为类以及父类/接口以及父接口

三、映射(Map<K,V>)

可以存储多个具有映射关系的容器

K代表键的类型,V代表值的类型

键不能重复但是值可以重复

由键一定乐意得到对应的值,映射(容器)由多个键和多个值来组成

把键和值当作成键值对来看待

为了搞笑的操作映射的数据,把键值对看做成对象,需要抽取成代表键值对的类(entry),这个类产生的对象就是真实的键值对,映射由多个键值对来组成

  • 映射的遍历
  1. 通过获取所有的键获取所有的值
//创建映射对象
        Map<String,Integer>  map = new HashMap<>();
        map.put("abc",123);
        map.put("bc",13);
        map.put("ac",23);
        map.put("ab",12);
        map.put("ab1c",1243);
        map.put("1abc",273);

        //获取映射中所有的键
        //把所有的键放到Set集合中
        Set<String> set = map.keySet();

        //遍历集合
        for (String s:set) {
            //通过键获取值
            System.out.println(s+"="+map.get(s));
        }
  1. 通过获取所有的键值对来获取键和值
//获取映射中所有键值对放到Set集合中
        Set<Map.Entry<String, Integer>> set = map.entrySet();
        for (Map.Entry<String, Integer> m:set) {
            //System.out.println(m);
            System.out.println(m.getKey()+"="+m.getValue());
        }
  • 常用
for (Map.Entry<String,Integer> m:map.entrySet()) {
            //System.out.println(m);
            System.out.println(m.getKey()+"="+m.getValue());
        }

Map接口是映射的顶级接口

实现类

  1. HashMap
  • 允许存储null值和null键
  • 底层基于数组+链表,不能重复元素且无序
  • 默认初始容量为16,默认加载因子0.75,每次扩容是在原容量的基础上增加一倍
  • 可以指定初始容量,如果指定容量范围值是2n~ 2n+1之内,底层真实的容量值是 2n+1
  • 异步式线程不安全的映射
    2.Hashtable
  • 最早打的映射类(jdk1.0)
  • 不能存储null值和null键
  • 默认初始容量为11,默认加载因子为0.75,每次扩容是在原容量的基础上增加一倍再加1
  • 指定初始容量值为多少,底层真实容量之就为多少
  • 同步式线程安全的映射

注意

映射不是集合,二者没关系

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值