JAVA类集总结笔记

集合框架底层数据结构总结

collection接口

  1. List:
  • Arraylist:数组(查询快,增删慢 线程不安全,效率高 )Arraylist:数组(查询快,增删慢 线程不安全,效率高 )
  • Vector:数组(查询快,增删慢 线程安全,效率低 )
  • LinkedList:链表(查询慢,增删快 线程不安全,效率高 )
  1. Set:
  • HashSet(无序,唯一):哈希表或者叫散列集(hash table)
  • LinkedHashSet:链表和哈希表组成 。 由链表保证元素的排序 , 由哈希表证元素的唯一性
  • TreeSet(有序,唯一):红黑树(自平衡的排序二叉树。)

Map接口

  • HashMap:基于哈希表的Map接口实现(哈希表对键进行散列,Map结构即映射表存放键值对)
    在这里插入图片描述
  • LinkedHashMap:HashMap 的基础上加上了链表数据结构
  • HashTable:哈希表
  • TreeMap:红黑树(自平衡的排序二叉树)

区别

List,Set,Map三者的区别及总结

  • List:对付顺序的好帮手
    List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象

  • Set:注重独一无二的性质
    不允许重复的集合。不会有多个元素引用相同的对象。

  • Map:用Key来搜索的专家
    使用键值对存储。Map会维护与Key有关联的值。两个Key可以引用相同的对象,但Key不能重复,典型的Key是String类型,但也可以是任何对象。

HashMap 和 Hashtable 的区别

  1. HashMap是 非线程安全 的,HashTable是 线程安全 的;HashTable内部的方法基本都经过synchronized修饰。

  2. 因为线程安全的问题,HashMap要比HashTable效率高一点,HashTable基本被淘汰。

  3. HashMap 允许有 null 值的 key 和 values 存在,而在 HashTable 中 put 进的键值只要有一个 null,直接抛出NullPointerException。

Hashtable和HashMap有几个主要的不同:线程安全以及速度。仅在你需要完全的线程安全的时候使用Hashtable,而如果你使用Java5或以上的话,请使用ConcurrentHashMap吧

Arraylist 与 LinkedList 区别

Arraylist底层使用的是数组(存读数据效率高,插入删除特定位置效率低),LinkedList底层使用的是双向循环链表数据结构(插入,删除效率特别高)。学过数据结构这门课后我们就知道采用链表存储,插入,删除元素时间复杂度不受元素位置的影响,都是近似O(1)而数组为近似O(n),因此当数据特别多,而且经常需要插入删除元素时建议选用LinkedList.一般程序只用Arraylist就够用了,因为一般数据量都不会蛮大,Arraylist是使用最多的集合类。

数组与List的相互转换

List转数组:toArray(arraylist.size()方法;数组转List:Arrays的asList(a)方法

List<String> arrayList = new ArrayList<String>();
		arrayList.add("s");
		arrayList.add("e");
		arrayList.add("n");
		/**
		 * ArrayList转数组
		 */
		int size=arrayList.size();
		String[] a = arrayList.toArray(new String[size]);
		//输出第二个元素
		System.out.println(a[1]);//结果:e
		//输出整个数组
		System.out.println(Arrays.toString(a));//结果:[s, e, n]
		/**
		 * 数组转list
		 */
		List<String> list=Arrays.asList(a);
		/**
		 * list转Arraylist
		 */
		List<String> arrayList2 = new ArrayList<String>();
		arrayList2.addAll(list);
		System.out.println(list);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值