您的位置:首页 > 理论基础 > 数据结构算法

java数据结构

2015-09-23 22:31 302 查看
常用的方法:

类 Arrays 的 static <T> List<T>
asList(T... a);

返回一个T的List

类 Collections的 static <T> boolean
addAll(Collection<? super T> c, T... elements)

将后面的多个参数添加到前面的collection中去

类Collection本身也有一个boolean addAll(Collection<? extends E> c)

将集合为c的加入到自身中去

存储方式:

ArrayList和LinkedList都是按插入元素的顺序保存的,ArrayList随机访问效率高于LinkedList,并且插入/删除代价比极大;而LinkedList插入删除比较好,但是随机性访问比前者低

LinkedList功能特点更多,可以把它像堆和栈一样用,其提供了很多有特点的方法,addFirst,addLast,getFirst,getLast,pop,push,pollFirst,pollLast等

LinkedList当栈用的方法:

pop() push() peek()返回栈顶元素但不删除 peekfirst() peekLast分别访问栈顶和栈底 empty()

LinkedList当队列Queue的方法:

LinkedList实现了队列接口Queue,可以像队列一样使用,offer()队尾添加 remove()/poll()队首删除并返回手元素(空时前者会抛出异常后者返回null) peek和element都是返回队首元素并且不删除(空时,peek返回null,element抛出异常)

HashSet和TreeSet和LinkedHashSet存储则不同,不会保存重复的数据,HashSet存储比较复杂,但是获取元素是最快的;如果要按顺序存储的话建议使用TreeSet和LinkedHashSet

set相对于Collection,没有多余的方法,只是行行为不同,重写;而Set数据元素更多的用来测试归属性contains(Object o)

以上四个多线程访问都是不安全的,多线程编程中要做好并发处理,或者用辅助类Collections的public static <T> Collection<T> synchronizedCollection(Collection<T> c)等发放创建对象实例

HashMap/TreeMap和LinkedhashMap通过键值对保存数据,和上面一样,HashMap存储顺序比较复杂,但是获取元素最快,TreeMap通过比较结果升序排列,LinedMap则是按添加顺序保存元素

迭代器:

Iterator提供了对数据结构的遍历与数据结构本身分离,不需要去关心数据结构底层是如何实现的,只需用hasnext() next去执行迭代器即可,但是只能单向遍历

ListIterator属于Iterator的子类,但功能更强大,支持双向遍历hasNext()/hasPrevious(),通过next()/previous()获取元素,还可以查看前一个/后一个元素的位置序号previousIndex()/nextIndex(),更能够修改元素set();还能够插入/删除元素,remove insert(双向迭代只能用于List)

Map数据类型迭代:

Map没有显示Iterator接口,但Map的方法entrySet()将键值对返回成一个set则可以用foreach来实现遍历

Map<Integer, Integer> map = new HashMap<Integer, Integer>();



for (Map.Entry<Integer, Integer> entry : map.entrySet()) {



System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());



}

PriorityQueue优先级队列:

在数据插入offer时,会将数据插入到合适的位置,从而保证取出peek poll的数据优先级是最高的(数字默认是越小越高,字符则越小越高 空格更高)

容器中的两个辅助类:

Collections和Arrays

他们属于工具类,提供了很多静态方法辅助Collection和MAP,并且不能实例化;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: