动态数据结构和泛型
0详细介绍java中的数据结构
也许你已经熟练使用了java.util包里面的各种数据结构,但是我还是要说一说java版数据结构与算法,希望对你有帮助。
线性表,链表,哈希表是常用的数据结构,在进行
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection接口
Collection
所有实现
如何遍历
1Iteratorit=collection.iterator();//获得一个迭代子
2while(it.hasNext()){
3Objectobj=it.next();//得到下一个元素
4}
由
主要方法:
·booleanadd(Objecto)添加对象到集合
·booleanremove(Objecto)删除指定的对象
·intsize()返回当前集合中元素的数量
·booleancontains(Objecto)查找集合中是否有指定的对象
·booleanisEmpty()判断集合是否为空
·Iteratoriterator()返回一个迭代器
·booleancontainsAll(Collectionc)
·booleanaddAll(Collectionc)
·voidclear()删除集合中所有元素
·voidremoveAll(Collectionc)
·voidretainAll(Collectionc)
List接口
List
和下面要提到的
除了具有
实现
主要方法:
·voidadd(intindex,Objectelement)在指定位置上添加一个对象
·booleanaddAll(intindex,Collectionc)
·Objectget(intindex)
·intindexOf(Objecto)
·Objectremoveint(intindex)删除指定位置的元素
·Objectset(intindex,Objectelement)
LinkedList类
LinkedList
注意
5Listlist=Collections.synchronizedList(newLinkedList(…));
ArrayList类
ArrayList
size
每个
和
主要方法:
·Booleanadd(Objecto)将指定元素添加到列表的末尾
·Booleanadd(intindex,Objectelement)在列表中指定位置加入指定元素
·BooleanaddAll(Collectionc)将指定集合添加到列表末尾
·BooleanaddAll(intindex,Collectionc)在列表中指定位置加入指定集合
·Booleanclear()删除列表中所有元素
·Booleanclone()返回该列表实例的一个拷贝
·Booleancontains(Objecto)判断列表中是否包含元素
·BooleanensureCapacity(intm)
·Objectget(intindex)返回列表中指定位置的元素
·IntindexOf(Objectelem)在列表中查找指定元素的下标
·Intsize()返回当前列表的元素个数
Vector类
Vector
Stack类
Stack
Set接口
Set
很明显,
请注意:必须小心操作可变对象(
Map接口
请注意,
主要方法:
·booleanequals(Objecto)比较对象
·booleanremove(Objecto)删除一个对象
·put(Objectkey,Objectvalue)
Hashtable类
Hashtable
添加数据使用
Hashtable
使用
6Hashtablenumbers=newHashtable();
7numbers.put(“one”,newInteger(1));
8numbers.put(“two”,newInteger(2));
9numbers.put(“three”,newInteger(3));
要取出一个数,比如
10Integern=(Integer)numbers.get(“two”);
11System.out.println(“two=”+n);
由于作为
如果相同的对象有不同的
Hashtable是同步的。
HashMap类
HashMap
WeakHashMap类
WeakHashMap
总结
如果涉及到堆栈,队列等操作,应该考虑用
如果程序在单线程环境中,,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
要特别注意对哈希表的操作,作为
尽量返回接口而非实际的类型,如返回
希望对你有帮助。
1List
分为顺序存储和链式存储。顺序存储便于查询,直接通过地址计算就可以获取。链式存储便于对象操作,只需要改变连接,新的节点可以在内存中的任何地方不能随即访问。
1.1ArrayList
本质是动态数组,顺序存储的表
缺点:
(1)使用ArrayList比使用数组效率更低;
(
ArrayList<String>list=newArrayList<String>(10);
对象的复制不可以直接使用赋值语句,否则只是多了一个引用。应该使用clone函数
使用
遍历的方法
推荐使用
也可以使用迭代的方法:
for(Iteratorit2=list.iterator();it2.hasNext();){
System.out.println(it2.next());
}
1.2LinkedList
本质是链式存储的表,使用与ArrayList十分相似。但只有在需要的时候分配内存以存储新的数据项,并在数据项删除时释放内存。
2Set
无重复元素集合类
2.1HashSet好想从现在开始抱着你,紧紧地抱着你,一直走到上帝面前。