Java容器类

java的容器类

java的容器类可以自动调节大小,用来保存对象,主要分为:
1. Collection:独立元素的序列,所有的Collection都可以使用for-each语法。
2. Map:存储键值对。
  • for-each语法:
    java SE5引入的更高效的用于数组和容器的for语法,不必创建int变量去对由访问项构成的序列进行计数,for-each将自动产生每一项。
    任何返回一个数组的方法都可以使用for-each,并且还可以用于任何Iterable对象。

Collection

1. List:将元素维护在特定的序列中。
	* ArrayList:底层结构是数组,随机访问的速度比较快,但是元素的插入和删除涉及到数组元素的移动,速度会比较慢
	* LinkedList:底层结构是链表,随机访问的速度因为需要遍历链表,所以比较慢,而元素的插入和删除,只需要修改指针,因此速度比较快。可以作为栈、队列、双端队列使用。
	* 几个特殊的方法:
		1)subList():返回列表中的一个子列表,在子列表上的修改会反映到初始列表中,反之亦然。
		2)retainAll():交集操作,所产生的操作依赖equals()方法。
2. 迭代器:也是一种设计模式,将遍历序列的操作与序列底层的结构分离。
				  迭代器是一个轻量级对象,它的工作是遍历并选择容器中的对象。
				  java中的迭代器只能单向移动。
		1)基本操作:
				* iterator()方法可要求容器返回一个Iterator对象,该对象即将指向序列中的第一个元素
				* hasNext():检查序列中是否还有元素
				* next():获得序列中的下一个元素
				* remove():将迭代器新返回的元素删除
		2)ListIterator:Itarator的子类,它可以实现迭代器的双向移动,还可以指向当前位置的前一个(prevousInex())和后一个元素(nextIndex())的索引,并可以用set方法替换它访问过的最后一个元素。还可以通过调用listIterator(n)方法来创建一个一开始就指向索引为n的元素处的listItreator。
3. set:不保存重复的元素,set是基于对象的值来确定归属性的,加入set的对象必须定义equals()方法来确保对象的唯一性。
		* HashSet:快速查找,使用了散列函数,内部结构是HashMap。
		* TreeSet::红黑树结构,升序排序。存入TreeSet的元素必须实现Comparable接口。comparator()返回当前set使用的Comparator,或者返回null表示以自然顺序排序。
		* LinkedHashSet:继承HashSet,但是以链表来维护插入顺序。
4. PriorityQueue:优先级队列
		普通队列的对列规则是下一个弹出元素是等待时间最长的元素,而优先级队列声明的是下一个弹出元素是最需要的元素。元素在插入的时候会在队列中进行排序,java的优先级队列默认是最小堆。
5.Map:
	* HashMap:底层结构是数组加链表加红黑树组成的,通过”散列码“进行元素查找,其元素插入和查找的开销是固定的
	*  LinkedHashMap:类似于HashMap,但是它用链表维护内部次序。
	* TreeMap:基于红黑树的实现,排序结构,也是唯一带有subMap()方法的Map,它可以返回一个子树。
	* WeakHashMap:弱键映射,允许释放映射所指向的对象。如果映射之外没有引用指向某个键,则该键会被垃圾收集器回收。
	* ConcurrentHashMap:线程安全的Map,不涉及同步加锁。
	* IdentityHashMap:用”==“代替equals()方法进行比较的散列映射。

注意:hashcode()方法与equals()方法的重写,因为默认是通过对象的地址来比较的。
不可修改的设定,创建只读的容器。
快速报错机制:java的机制,用来防止多个进程同时修改同一个容器,ConcurrentModificationException异常抛出。其中,concurrentMap、CopyOnWriteArrayList和CopyOnWriteArraySet都使用了可以避免该异常的技术。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值