Java中的集合

Lis集合

1.特征:有序(有次序,有下标),可重复

2.常用实现类:

ArrayList:

  • 第一个构造方法:初始容量,默认为10

  • 第三个构造方法:已知容量,设置初始容量,避免大量扩容

  • 第二个构造方法:把其他集合转换为ArrayList

  • 特征:查找效率高,,查询某个下标的元素,只需要计算下标的地址码,插入删除效率低,需要移位操作。底层为:数组,连续空间

  • 原理:扩容,移位

  • 面试题:

    • 底层是数组,数组在什么时候初始化?

    • ArrayList扩容为多少?1.5倍,容量最大值为Integer-8 21亿左右

LinkedList:

  • 单向链表:上一个结点查找下一个结点

  • 双向链表:上一个结点查找下一个结点,下一个结点查找上一个结点

  • 特征:底层为双向链表,查找效率低,插入删除效率高,不需要移位,只需要改变指针的值,相对ArrayLIst多了一些对头尾的操作

  • 使用方法

    • 创建List对象,一般使用父接口类接收,这样后面调用的方法都是通用方法,每个子类都要,修改子类,不需要修改后面的代 

      public class Test5 {
          public static void main(String[] args) {
              List list = new ArrayList<>();
      }

                                  

常用方法:

  • 增加元素

    • arraylist.add()//先装箱,再向上转型为Object类型

      list.add("aaa");

    • addAll(collection)//末尾添加,把另一个集合的元素全加进去

    • add(int 下标,元素)//在指定位置插入元素

  • 查询元素

    • 判断某个元素是否存在//Boolean contains

    • 查询某个元素第一次出现的位置//indexOf()找不到返回-1

    • 查询某个元素最后一次出现的位置//lastindexOf()找不到返回-1

    • 获取指定位置的元素 get(int 下标)

  • 删除元素

    • 删除指定位置上的元素remove(int 下标)返回被删除元素

    • 删除指定元素remove(“元素”)

    • 删除元素1remove((object)1)向上转型为object类型

    • 清空:arrayList.clear();

    • 删除多个元素:arraylist1.removeAll(arraylist3)删除arraylist1中arrayList3有的元素

  • 修改元素

    • set(int 下标,元素)

  • 其他方法

    • 集合元素个数 size()

    • 集合是否为空 isEmpty()//true表示为空 false不为空

    • 转换为数组 arrayList.toArray();

    • 遍历循环LIst fori循环 配合get()

Set集合

  • 无序(没下标,没有次序),唯一

    • HashSet

      • 使用场景,去重复,底层为HashMap,Hashset把HashMap的key上面

        • 添加元素

          • set.add()//元素存在就不做任何操作

        • 判断重复

          • ==判断地址码

          • 调用对象的equals()与hashCode()方法,从object类继承,equals()方法底层是调用==方法

          • HashSet判断对象相等执行流程

            • 1.判断两个对象hashCode码是否一样,如果不一样,不是同一个对象

            • 2.如果一样,还不能判断是否是同一个对象,需要调用equals方法

            • 如果自定义类型,实际开发中需要将两个方法都重写

          • 面试题:怎么让一个对象在HashSet中添加两次

            • 答案:让hashcode方法通过随机数每次产生不一的hash值

    • TreeSet

      • 可排序,红黑树,存储的元素,自动排序,基于TreeMap

      •   TreeSet treeSet = new TreeSet(new MyCompare());
                treeSet.addAll(list);

    • LinkedHashset

      • 有序唯一,无下标,如商品的浏览历史,添加的顺序和获取的顺序一致

        • 他是HashSet子类,有HashSet的所有的功能,保证添加元素的顺序,与获取元素的顺序一致,保证次序:LInkedHashSet在Hashset基础上

  • 默认容量16

 Map集合

  • map的key是唯一的,value不一定是唯一的

  • map的key和value的数据类型类类型,可以是任意数据类型

  • map添加数据时,如果key已存在,执行覆盖value

  • map的key可以是null,但是只能一个,实际开发中,不会使用null作为key

  • map接口的常用实现类

    • HashMap(最常用)

    • properties(后期使用到)

    • TreeMap

  • Map常用方法:

    • put(key,value)

      • 如果key 不存在,执行添加操作

      • 如果key存在,执行修改value操作

    • remove(key)//根据key删除key/value对

    • get(key)根据key 获取value

    • containsvalue/key:判断value是否存在

    • clear()清空

    • size()元素个数

    • isEmpty

    • Map<String, User> map = new HashMap<>();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值