java中集合/堆/队列/栈等不同接口与类的特性总结

前提摘要:

LinkedList链表(实现list):

LinkedList:实质链表(允许 null 元素的存在+允许重复元素+用于首部或指定位置进行添加和删除较多的情况下。)

LinkedList 实现了 List 接口,可进行列表的相关操作。

ArrayList列表(实现list):

ArrayList实质是顺序表,底层是一个数组。(用于查询更改,尾部添加删除较多的情况)

方法和上图一致

LinkedList链表(实现Queue):

LinkedList:实质链表(允许 null 元素的存在+允许重复元素+用于首部或指定位置进行添加和删除较多的情况下。)

LinkedList 实现了 Queue接口,可进行列表的相关操作。

TreeSet集合(实现set):

特点:不允许重复数据,自动排序,不能含有空元素。

在TreeSet中,当你插入一个元素时,确实可以理解为使用了一次O(log n)的操作来完成去重和排序的功能。(去重复杂度: O(log n)。TreeSet是基于红黑树实现的,插入元素时,它会根据比较器(Comparator)或者元素自身的自然顺序将元素放入正确的位置,保证元素的唯一性。红黑树是一种自平衡的二叉查找树,它保证了树中的元素是有序的。当你插入一个新元素时,红黑树会根据元素的大小关系将其插入到合适的位置,从而保持树的有序性。)

因此,每次插入元素到TreeSet中,你可以理解为同时完成了去重和排序的操作,其时间复杂度为O(log n)。

 boolean    add(E e) //如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。
 boolean    addAll(Collection<? extends E> c) //如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中(可选操作)。
 void      clear() //移除此 set 中的所有元素(可选操作)。
 boolean    contains(Object o) //如果 set 包含指定的元素,则返回 true。
 boolean    containsAll(Collection<?> c) //如果此 set 包含指定 collection 的所有元素,则返回 true。
 boolean    equals(Object o) //比较指定对象与此 set 的相等性。
 int       hashCode() //返回 set 的哈希码值。
 boolean    isEmpty() //如果 set 不包含元素,则返回 true。
 Iterator<E>    iterator() //返回在此 set 中的元素上进行迭代的迭代器。
 boolean    remove(Object o) //如果 set 中存在指定的元素,则将其移除(可选操作)。
 boolean    removeAll(Collection<?> c) //移除 set 中那些包含在指定 collection 中的元素(可选操作)。
 boolean    retainAll(Collection<?> c) //仅保留 set 中那些包含在指定 collection 中的元素(可选操作)。
 int       size() //返回 set 中的元素数(其容量)。
 Object[]   toArray() //返回一个包含 set 中所有元素的数组。

HashSet集合(实现set)

去重复杂度: O(1)。

Map类型:

 HashMap  HashMap中k的值没有顺序,常用来做统计。所以不能保证取里面元素时的顺序(key:value有null的时候可以用+key重复时替换旧值,但是key位置不会变

LinkedHashMap 它内部有一个链表,保持Key插入的顺序。可以保证按添加的顺序去取。(+key重复时替换旧值,但是key位置不会变

TreeMap 可以保证按 key 的排序顺序去取(key 需要实现 Comparable, 否则会报错 cannot be cast to java.lang.Comparable)       +key重复时替换旧值,而且会重新排序位置

4.Hashtable与 HashMap类似,它继承自Dictionary类、不同的是:它不允许记录的键或者值为空;它支持线程的同步、即任一时刻只有一个线程能写Hashtable,因此也导致了 Hashtable在写入时会比较慢

Keyset():

 for (Integer key : map.keySet()) {
            System.out.println("key = " + key);
        }       

 entrySet();

功能:返回一个保存键值对的set集合,便于遍历的取出数据

for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
        }

map.putAll();

功能:将集合合并

  Map map3 = new HashMap();
  //添加键值
  map3.put("1", "苹果");
  map3.put("2", "香蕉");
  map3.put("3", "菠萝");
  System.out.println("map3的大小为:"+map3.size());
  //再生成一个实例
  Map map4 = new HashMap();
  map4.put("4", "梨子");
  map4.put("5", "柿子");
  System.out.println("map4的大小为:"+map4.size());	   //把map4合并到map3
  //合并时如果map4的key与map3的key有重复的,则map4的键值覆盖与map3重复的键值
  map3.putAll(map4);
  System.out.println("合并后map3的大小为:"+map3.size());

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值