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,并且不能实例化;
类 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,并且不能实例化;
相关文章推荐
- 河南理工大学14级数据结构第一次上机实验课题试验
- 数据结构与算法面试题80道
- 关于栈的操作
- 数据结构与算法分析(c++版) #8 顺序栈和链式栈
- 【链表项目2 - 建设“单链表”算法库】
- LEETCODE-Remove Linked List Elements
- 数据结构与算法分析(c++版) #7 栈
- 第四周项目三数据结构实践(三)——单链表:递增判断
- 第四周项目三 数据结构实践(二)——单链表:连接
- PHP 数据结构
- 两个一元多项式相加(链表 || 顺序表实现)
- MySQL列:innodb的源代码的分析的基础数据结构
- Spark RDD转换成其他数据结构
- 数据结构基础 从01背包问题理解动态规划
- 数据结构面试题1.2.9-查找最小的K个元素-使用最大堆
- 数据结构:最小生成树--Prim算法
- 找出一个字符数组(元素不重复)所有可能字符的组合
- 数据结构之AVL树
- 数据结构与算法分析2.19题
- RMQ with Shifts