集合框架结构详细

java集合框架

集合框架结构图
在这里插入图片java描述

Collection接口

1.List

  • ArrayList: 查询效率高,增删慢,且线程不安全。
  • LinkedList: 查询慢,增删快,但线程安全。
  • Vector: 查询快,线程安全。

1.1 ArrayList是一个的实质就是一个可变数组,它的随机访问速度是最快的。但是对随机项的插入和删除操作代价是比较昂贵的,除非变动是在ArrayList末端,原因是从数组中间删除一个元素,所有的元素都要向数组的前端移动,同理,在数组中间插入一个元素也是如此。

1.2 LinkedList,有序,用链表实现的集合,数组是在连续的存储位置上存放对象引用,但链表却将每个对象存放在独立的节点中,每个节点还存放着序列中下一个节点的引用,java语言中的链表实际上都是双向链接,每个节点还存放着指向前驱节点的引用。这样在链表中间删除一个元素是很轻松的操作,只需要对被删除元素附近的节点更新一下就可以了。

2.Set

  • HashSet: 效率高,键可以为null,值不能为null,无序的,线程不安全。

  • LinkedHashtable: 效率低。键值不可以为null,有序的,线程不安全。

    HashSet是基于HashMap实现的,HashSet底层采用HashMap来保存所有元素。
    HashCode和equal()是HashMap用的,因为无需排序所以只需要关注定位和唯一性即可
    HashCode是用来计算hash值的,hash值是用来确定hash表索引的

Map接口

  • HashMap:键值都可以为null,键不能重复,无序的,线程不安全。且只能使用foreach(增强for循环)或Iterator(迭代器)。
  • Hashtable: 键值都不能为null,无序的,线程安全。且只能使用foreach(增强for循环)或Iterator(迭代器)。

Map就是映射表,映射表用来存放键值对,键必须是唯一的,不能对同一个键存放两个不同的值,如果对同一个键调用两次put方法,第二个值会取代第一个值并返回旧的值。集合框架并没有将映射表本身视为一个集合,然而我们可以获得映射表的视图,视图是实现了Cllection接口的对象的,从而用迭代器实现对Map的迭代。

三种遍历Map方法

  Map<String,Integer>  treeMap = new TreeMap<>();
  treeMap.put("abc", 1);
  treeMap.put("ABC", 2);
  treeMap.put("xyz", 3);
  treeMap.put("XYZ", 4);
  System.out.println("treeMap:" +treeMap);
  
  System.out.println("第一种遍历方式:通过Map.keySet遍历key,通过key取出对应的value值");
  for (String key : treeMap.keySet()) {
   System.out.println(key + "--" + treeMap.get(key));
  }
  // 一键一值 => entry
  System.out.println("第二种遍历方式:通过Map.entrySet使用迭代器遍历key和value");
  Set<Map.Entry<String,Integer>>  entrySet = treeMap.entrySet();
  Iterator<Entry<String, Integer>> entrySetIt =  entrySet.iterator();
  while(entrySetIt.hasNext()){
   Map.Entry<String, Integer> entry = entrySetIt.next();
   System.out.println(entry.getKey() + "--" + entry.getValue());
  }
  
  System.out.println("第三种遍历方式:直接遍历Map.entrySet集合---容量大时使用");
  for(Entry<String,Integer> entry : treeMap.entrySet()){
   System.out.println(entry.getKey() + "--" + entry.getValue());
  }

如何选用集合类?

  1. 要求线程安全,使用Vector、Hashtable
  2. 不要求线程安全,使用ArrayList,LinkedList,HashMap
  3. 要求key和value键值,则使用HashMap,Hashtable
  4. 数据量很大,又要线程安全,则使用Vector
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值