Thinking in Java:持有对象

持有对象

容器类:
容器类结构图:



Collection:独立元素序列
List:按插入顺序保存元素
ArrayList:底层由数组实现,数组长度自增长,每次增长为之前的一半,进行随机访问时效率较高,进行数据的插入/删除时效率低
LinkedList:底层由双链表进行实现,进行随机访问时效率较低,进行数据的插入/删除时效率高。
LinkedList可以通过其方法来实现栈与队列的功能:
栈实现:
public class LinkedListStack<E> {
	private LinkedList<E> linkedList = new LinkedList<E>();
	
	//入栈
	public void push(E obj){
		linkedList.addFirst(obj);
	}
	//出栈
	public E pop(){
		return linkedList.removeFirst();
	}
	//获取栈头信息
	public E peek(){
		return linkedList.getFirst();
	}
	
	public boolean isEmpty(){
		return linkedList.isEmpty();
	}
}
队列实现(LinkedList本身实现了Queue接口,可直接将其作为队列使用,同时在Java1.6中LinkedList实现了Deque接口支持双端队列)

Set:不能有重复元素
HashSet:使用散列
LinkedHashSet:按照插入顺序保存数据,由链表实现,但查找数据时使用散列
TreeSet:对其中数据进行升序排序,底层由树实现
Queue:按照排队规则进行排序
PriorityQueue:按优先级进行出队列

Map:
HashMap:查找数据时使用散列
内部有一数组,数组中存放的是LinkedList,当调用put()方法时,先获取键值的哈希值作为数组下标,然后将entry放入在该下标下的LinkedList(没有就new一个)。
数组长度有默认值,也可通过构造方法传入
查找时先根据其哈希值找到所在LinkedList然后再在LinkedList上做线性查找
通过其哈希算法获取的哈希值越平均,效率越高


LinkedHashMap:按照插入顺序保存键值,由链表实现,但查找数据时使用散列
TreeMap:使用红黑树实现,对其中数据进行升序排序


迭代器:
迭代器能够屏蔽底层的具体实现来对容器进行遍历
Collection继承了Iterable接口,以至于其子类可通过iterator()获取迭代器
只有实现了Iterable接口的对象才能够用于Java的foreach语法
ListIterator只用于List
注意:
在使用iterator对容器进行遍历时不能够做出修改容器结构的操作(增加/删除),否则会抛出ConcurrentModificationException异常(在调用next()方法时会对容器内对象数量进行检查,若有变化就抛出异常)

Comparable比较所用,进行排序的对象应实现该接口,也可另外提供比较方式
Collections、Arrays为工具类





























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值