1.arraylist与linkedList的区别和使用场景
先对比分析各自的优缺点:
Arraylist:
优点:因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)
缺点:因为地址连续,所以插入和删除操作效率比较低? ? ? ??
LinkedList:
优点:地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,所以非常适合进行插入和删除的操作
缺点:查询操作性能比较低。
应用场景分析:
在需要随机访问的情况下,Arraylist优于LinkedList,因为LinkedList要从一端开始移动指针直到访问的元素位置。在需要增删操作的情况下,LinkedList又明显优于Arraylist,因为Arraylist每一次增删都要移动数据。
?
2.ArrayList与Vector的区别和使用场景
区别:Arraylist不是线程同步的,Vector是线程同步的。
在多线程中一般采用Vector,在单线程中一般采用ArrayList。
?
3.HashSet与TreeSet的使用场景
HashSet:在无序的排序时使用。
TreeSet:在需要根据内容的自然顺序进行排序时使用。
?
4.HashMap的使用场景
HashMap是用来存储具有键值对特征的数据,不保证存储顺序,不能重复。
可以用HashMap来做通讯录(用户名=联系号码)的存储,或者按员工号,学号之类的存储数据时使用。
?
5.使用数组,实现一个栈
?
???????? class MyStack<E> {
?????????????????? void push(E e);//压入栈
?????????????????? E pop();//弹出栈
?????????????????? int size();//栈长度
?????????????????? E peek();//查看栈顶数据
???????? }
?
import java.util.ArrayList; import java.util.List; import java.util.Stack; public class MyStack<E> { private ArrayList<E> stackArray ; private int top; private int buttom; private int max; public MyStack (int max) { this.stackArray = new ArrayList<E> (max) ; top = -1; } //压入栈 public void push(E e) { stackArray.add(e); top ++; } //弹出栈 public E pop() { return stackArray.remove(top--); } //栈长度 public int size() { return top+1; } //查看栈顶数据 public E peek() { return stackArray.remove(top); } }
?
?
6.查资料,了解Hash算法,能够自定义一个HashSet
一开始感觉自定义一个HashSet应该不难,然后慢慢发现首先还得先自定义一个hashmap,更深入还得定义hashcode的算法,然后发现这是个很艰巨的任务…
查了好久的资料,了解了一些基本的概念,比如计算hashcode的算法思想,如何处理地址冲突的问题,原来加入了链表..最后找到了一篇博客,惊奇发现是mzd前辈写的…
http://java-mzd.iteye.com/blog/827523
自定义实现了hashmap,
?
看完之后感觉收获很大,但是又感慨自己数据结构和算法的不足,因为下午还有课,所以先放置在此,这几天争取理解透彻并能够自己实现。
?
原文:http://545283613.iteye.com/blog/2251751