java集合总结

在这里插入图片描述
从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
在这里插入图片描述
Java 集合框架提供了一套性能优良,使用方便的接口和类,java集合框架位于java.util包中, 所以当使用集合框架的时候需要进行导包。
在这里插入图片描述
接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象
实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。

一、ArrayList----->底层就是一个数组

	所属的包 java.util
	如何创建对象
	无参数构造方法    带默认空间的构造方法    带collection参数的构造方法
	常用的方法---小容器
		存 add、取 get、删 remove、改 set、个数  size
		add(E e)   add(int index,E e)
		addAll(Collection c);   add(int index,Collection c)
		clear();将集合内的全部元素清除
		boolean = contains(Object);找寻某一个给定的元素是否在集合中拥有
		ensureCapacity(int minCapacity);
		E = get(int index);
		int = indexOf(Object obj);  lastIndexOf();
		boolean = isEmpty();
		Iterator = list.iterator();//迭代器
		remove(int index)  remove(Object obj)
		removeAll()差集
		retainAll();交集
		E = set(int index,E value)
		int size();
		List = subList(int begin,int end);
		toArray();	集合变成数组
		toArray(T[] );
		trimToSize();// 变成有效元素个数那么长

二、Vector类

        1.java.util包
        2.是`ArrayList集合的*早期版本*`	
	    Vector底层也是利用(动态)数组的形式存储
	    Vector是线程同步的(synchronized)  安全性高  效率低
        3.扩容方式与ArrayList不同
	    默认是扩容2倍   可以通过构造方法创建对象时修改这一机制

三、LinkedList类

      1.java.util包	自己封装过LinkedBox   内部类Node<T>对象(节点 prev item next)
2.底层使用双向链表的数据结构形式来存储
	适合于插入或删除  不适合遍历轮询
3.构建对象
	无参数构造方法   带参数的构造方法(collection)
4.常用的方法
	增删改查   add()  remove()  set()  get()  size()	offer  poll   peek
	手册中提供的其他常用方法
	addAll   addFist   addLast()  clear()  contains()
	element()  getFirst()  getLast()  indexOf()  lastIndex()

四、Queue接口

1.java.util		通常子类LinkedList   ArrayDeque
2.通常无参数构造方法创建
3.一般方法
	add()
	element()---->get()
	remove()
	boolean = offer(E e);//相当于add	不会抛出异常
	E = peek();//相当于 element方法
	E = poll();剪短//  相当于remove()
4.双十一零点秒杀
	所有进入秒杀系统的人存入队列

五、HashSet---->(HashMap (数组+链表) 散列表 临接连表)

	1.java.util
	2.如何创建对象   无参数  有参数
	3.集合容器的基本使用
		增删改查
		boolean = add(value)   addAll(collection c)   retainAll   removeAll
		boolean = remove(Object)
		没有修改方法
		iterator()  获取一个迭代器对象
		size()
	4.无重复的原则
		首先通过String类型和Person类型存储
		大概猜测  无重复的原则  利用equals方法进行比较
		如果我们想要让Person对象的name一致 认为是同一个对象
		我们可以重写equals方法
		重写了equals方法  发现还没有产生无重复的效果
		证明可能原则不止equals一个方法这么简单
		还有另一个规则同时起着作用 hashCode方法  int
		五个Person对象只剩一个   第一次存储的   还是最后一次存储
		set集合是发现重复的元素 拒绝存入  存储的是第一个

六、TreeSet-----(TreeMap 二叉树 利用Node(left item right))

	无序无重复  java.util
	无参数构造方法    带Collection构造方法
	基本常用方法
		add(E e)  iterator()  remove(E e)  没有修改  size()
	无重复的规则是如何实现的
		treeSet集合本身有顺序   我们指的无序存入的和取出来的不一致
		compareTo---->String类  按照字母的自然顺序排布(Unicode)
		如果想要把自己写的类型 比如Person对象存入TreeSet集合里
		不能随意的存储	需要让自己写的类先实现Comparable接口
		Map   映射   通过某一个key可以直接定位到一个value值
存储的方式以  键值对  存储   key-value
key无序无重复   value无序可重复
key无序还是一样,指的是存入顺序与取得顺序不一致
key无重复当然指的是 元素不能一致

1.map基本使用
	HashMap
	TreeMap
	Properties

HashMap

1.包 java.util
2.基本方法
	增删改查
	增put(key,value)	存放一组映射关系   key-value
		1.key存储的顺序与取得顺序不同
		2.不同的key可以存储相同的value
		3.key若有相同的 则将 原有的value覆盖而不是拒绝存入(跟set刚好相反)
	删E = remove(key);
	改put(key,value1)    put(key,value2)
	   replace(key,newValue)
	查E = get(key)
	遍历map集合?	key不一定什么样
		获取到所有的key	遍历key	通过key获取value
		Set<Key> = keySet()获取全部的key
		Set<Entry> = entrySet();
	size();
3.除了上述几个常用的方法外  其他API中提供的方法
	clear   containsKey(key)   containsValue(value)
	getOrDefault(key,defaultValue);如果key存在就返回对应的value 若没有找到则返回默认值
	isEmpty()
	putAll(map)
	putIfAbsent(key,value);//如果key不存在才向集合内添加  如果key存在就不添加啦
4.map集合在什么情形下用?
	1.想要存储一组元素
		数组  or  集合    如果存储的元素以后长度不变用数组  如果长度以后不确定 用集合
	2.如果发现长度以后不确定--->集合
		List  Set  Map
		List家族有序的   存储有顺序用这个
			ArrayList		更适合遍历轮询
			LinkedList	更适合插入和删除
			Stack		LIFO
		Set家族无重复    存储元素希望自动去掉重复元素用这个
			Hash	性能更高
			Tree	希望存进去的元素自动去重复  同时还能自动排序
		Map家族k-v      通过唯一的k快速找寻v用这个
			Hash	性能更高
			Tree	希望存进去的元素key自动排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值