数据结构

来源:互联网 发布: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.线程:栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属线程中可见,即栈内存可以理解成线程的私有内存。

而堆内存中的对象对所有线程可见。堆内存中的对象可以被所有线程访问

1 0
原创粉丝点击