Java集合(容器)笔记

ArrayList (顺序表) 一种可以动态增长和缩减的索引序列
LinkedList(双向链表) 一种可以在任何位置进行高效地插人和删除操作的有序序列
HashSet 一种没有重复元素的无序集合
TreeSet —种有序集
LinkedHashSet 一种可以记住元素插人次序的集
HashMap 一种存储键/ 值关联的数据结构
TreeMap —种键值有序排列的映射表
LinkedHashMap 一种可以记住键/ 值项添加次序的映射表
在这里插入图片描述
在这里插入图片描述

  1. List
    • 特点:有序 不唯一(可重复)
    ArrayList 线性表中的顺序表
    • 在内存中分配连续的空间,实现了长度可变的数组
    • 优点:遍历元素和随机访问元素的效率比较高
    • 缺点:添加和删除需大量移动元素效率低,按照内容查询效率低,
    LinkedList 线性表中双向链表
    • 采用双向链表存储方式。
    • 缺点:遍历和随机访问元素效率低下
    • 优点:插入、删除元素效率比较高(但是前提也是必须先低效率查询才可。如果插入删除发生在头尾可以减少查询次数)

在这里插入图片描述
2. Set
• 特点:无序 唯一(不重复)
HashSet
• 采用Hashtable哈希表存储结构(神奇的结构)
• 优点:添加速度快 查询速度快 删除速度快
• 缺点:无序
LinkedHashSet
• 采用哈希表存储结构,同时使用链表维护次序
• 有序(添加顺序)
TreeSet
• 采用二叉树(红黑树)的存储结构
• 优点:有序 查询速度比List快(按照内容查询)
• 缺点:查询速度没有HashSet快
• TreeSet中指明排序依据
• 实现Comparable接口
• 创建实现Compator接口的类。
3. Map
• 特点 key-value映射
• HashMap
• Key无序 唯一 (Set)
• Value 无序 不唯一 (Collection)
• LinkedHashMap
• 有序的HashMap 速度快
• TreeMap
• 有序 速度没有hash快
Map与Set的关联:hashset实际上就是底层调用的hashmap,在构造hashset的时候就已经将hashmap创建
采用了相同的数据结构,只用于map的key存储数据,就是Set
eg:

HashMap map;//先创建HashMap的对象
		private static final Object PRESENT=new Object();
		public SxtHashSet() {
			map=new HashMap();//构造hashset时创建hashmap
		}
		public int size() {
			return map.size();
		}
		public void add(Object o) {
			map.put(o, PRESENT);//通过调用map的put实现添加
		}

4.Iterator
• 所有集合类均未提供相应的遍历方法,而是把把遍历交给迭代器完成。迭代器为集合而生,专门实现集合遍历

Iterator是迭代器设计模式的具体实现
• Iterator方法
• boolean hasNext(): 判断是否存在另一个可访问的元素
• Object next(): 返回要访问的下一个元素
• void remove(): 删除上次访问返回的对象。
5.使用泛型
• 起因:
• JDK1.4以前类型不明确:
• 装入集合的类型都被当作Object对待,从而失去自己的实际类型。
• 从集合中取出时往往需要转型,效率低,容易产生错误。
• 解决办法:
• 泛型,在定义集合的时候同时定义集合中对象的类型
• 好处:
• 增强程序的可读性和安全性

6.Vector(旧的集合类)
• 实现原理和ArrayList相同,功能相同,都是长度可变的数组结构,很多情况下可以互用
• 两者的主要区别如下
• Vector是早期JDK接口,ArrayList是替代Vector的新接口
• Vector线程安全,效率低下;ArrayList重速度轻安全,线程非安全
• 长度需增长时,Vector默认增长一倍,ArrayList增长50%
7.Hashtable类(旧的集合类)
• 实现原理和HashMap相同,功能相同,底层都是哈希表结构,查询速度快,很多情况下可互用
• 两者的主要区别如下
• Hashtable是早期JDK提供的接口,HashMap是新版JDK提供的接口
• Hashtable继承Dictionary类,HashMap实现Map接口
• Hashtable线程安全,HashMap线程非安全
• Hashtable不允许null值,HashMap允许null值
8. 集合和数组的比较
• 数组不是面向对象的,存在明显的缺陷,集合完全弥补了数组的一些缺点,比数组更灵活更实用,可大大提高软件的开发效率而且不同的集合框架类可适用于不同场合。具体如下:
• 1 : 数组容量固定且无法动态改变,集合类容量动态改变。
• 2:数组能存放基本数据类型和引用数据类型的数据,而集合类中只能放引用数据类型的数据。
• 3:数组无法判断其中实际存有多少元素,length只告诉了array容量;集合可以判断实际存有多少元素,而对总的容量不关心
• 4:集合有多种数据结构(顺序表、链表、哈希表、树等)、多种特征(是否有序,是否唯一)、不同适用场合(查询快,便于删除、有序),不像数组仅采用顺序表方式
• 5:集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性调用即可实现各种复杂操作,大大提高软件的开发效率。
总结:
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值