集合框架学习总结记录

1.arraylistlinkedList的区别和使用场景

先对比分析各自的优缺点:

Arraylist

优点:因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)

缺点:因为地址连续,所以插入和删除操作效率比较低        

LinkedList

优点:地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,所以非常适合进行插入和删除的操作

缺点:查询操作性能比较低。

应用场景分析:

在需要随机访问的情况下,Arraylist优于LinkedList,因为LinkedList要从一端开始移动指针直到访问的元素位置。在需要增删操作的情况下,LinkedList又明显优于Arraylist,因为Arraylist每一次增删都要移动数据。

 

2.ArrayListVector的区别和使用场景

区别:Arraylist不是线程同步的,Vector是线程同步的。

在多线程中一般采用Vector,在单线程中一般采用ArrayList

 

3.HashSetTreeSet的使用场景

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 int top;
	private int buttom;
	private int max;
	private int length;
	private int increment = 2;
	private Object[] stack ;
	
	public MyStack (int initCapacity) {
		 = initCapacity;  
	}
	
	public Object[] extend(){
		  Object[] dest = new Object[(int)(stack.length * increment)];  
          
	        System.arraycopy(stack, 0, dest, 0, stack.length);  
	          
	        return dest;  
		
	}
	
	  public boolean isEmpty() {  
		  
	        return length == 0 ? true : false;  
	    }  
	
	//压入栈
	public void push(Object obj) {
	    if(length >= stack.length){  
	    	stack = extend();  
        }  
          
	    stack[length] = obj;  
        length ++; 
	}
	
	//弹出栈
	public Object pop() {
		  if(isEmpty()){  
	            throw new NullPointerException();  
	        }  
	          
	        length --;  
	        return stack[length];  
		
	}
	
	//栈长度
	public int size() {
		return length;  
	}
	
	//取出栈顶
	public Object peek() {
	    
        if(isEmpty()){  
            throw new NullPointerException();  
        }  
          
        return stack[length-1];  
		
	}
	
}

 

 

6.查资料,了解Hash算法,能够自定义一个HashSet

一开始感觉自定义一个HashSet应该不难,然后慢慢发现首先还得先自定义一个hashmap,更深入还得定义hashcode的算法,然后发现这是个很艰巨的任务

查了好久的资料,了解了一些基本的概念,比如计算hashcode的算法思想,如何处理地址冲突的问题,原来加入了链表..最后找到了一篇博客,惊奇发现是mzd前辈写的

http://java-mzd.iteye.com/blog/827523

自定义实现了hashmap

 

看完之后感觉收获很大,但是又感慨自己数据结构和算法的不足,因为下午还有课,所以先放置在此,这几天争取理解透彻并能够自己实现。

 

猜你喜欢

转载自545283613.iteye.com/blog/2251751