数据结构
来源:互联网 发布:java商城开发视频教程 编辑:程序博客网 时间:2024/05/16 18:53
(1)数组
使用ArrayList时一般不需要同步,而使用Vector时则需要同步因此比较费时.
(2)链表(单链表,双链表)LinkedList
LinkedList.add方法依赖于迭代器不同于Collection.add,不返回boolean
a.有序
b.previous,hasPrevious(反向遍历)
c.previous使用remove是将删除光标右侧的元素,next方法删除光标左侧的元素.即返回的是越过的元素.
d.链表的get方法每次都是从头获取,效率极低.对于链表最好用迭代器.
e.链表便于插入和删除元素,当具有大量数据插删时,优势较大
f.数组和ArrayList则便于进行随机访问,而LinkedList则便于进行迭代访问.
g.indexOf(element) lastIndexOf(element)
(3)队列Queue(一种接口)
a.先进先出
b.实现形式:链表LinkedListQueue(无限但速度很慢),循环数组CircularArrayQueue(空间有限)
c.有两个端头的队列为双端队列,可以头尾同时增删元素
d.ArrayDeque无线双端队列
e.优先级队列priority queue(使用的数据结构为堆heap,一种自我调整的二叉树)PriorityQueue
(4)Java中的接口类有Vector,Hashtable,(已被替代)Stack,BitSet,Enumeration(穷举)
(5)集合Collection----Set(无序不重复)List(有序重复)
a.add返回boolean类型
b.Iterator迭代器:next(结合hasNext,不然抛出异常),hasNext,remove,使用foreach可以替代
c.Set拒绝纳入重复的元素
D.contains,clear,toArray(返回集合的对象数组)
(6)Map(键值对)方法用put(键值联系)和get
实现方法:HashMap和TreeMap:如果不要求排序用HashMap更快,而且只能对键进行比较而无法对值进行比较.
a.keySet(),values(),entrySet()
(7)Hash散列(无序,快速,适于插删定位)-----Tree(有序,按一定顺序遍历键)
hash table:会自动生成hash code,没有索引数字
实现:set 无序不重复
散列码对总桶数(bucket)取余是当前存放的桶数.
判断相等要具有相同的hashcode
(8)树Tree:Treeset:改进之处:按照一定的顺序进行排列
Sortedset s = new Treeset();
插入指定位置要比链表和散列表快
对于数字和字符串的比较用compareTo的Comparable接口来进行,a.compareTo(b)中a在b前则为负,a在b后则为正.
this指该对象.
(9)其他数据结构
栈:栈(Stack)实现了一个后进先出(LIFO)的数据结构。
a.存储对象:最主要的区别就是栈内存用来存储局部变量和方法调用。
而堆内存用来存储Java中的对象。无论是成员变量,局部变量,还是类变量,它们指向的对象都存储在堆内存中。
b.线程:栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。
而堆内存中的对象对所有线程可见。堆内存中的对象可以被所有线程访问
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- Hibernate 的学习之路之错误笔记day02
- git将本地仓库上传到远程仓库
- 模拟登陆百度之分析网站流程
- I00022 孙子定理
- git使用详细介绍
- 数据结构
- 117. Populating Next Right Pointers in Each Node II
- 写给自己的一封信(http://www.cnblogs.com/yejiurui/)
- 【转载】大型互联网网站架构演变
- hdu5464 Clarke and problem (dp)
- ACM心得
- ROS SLAM代码框架概述
- 120. Triangle
- android调用高版本api函数的兼容性问题