Java基础每日10题——第四天

1.Java中ArrayList和LinkedList区别

总结的说:

当操作是在一列数据后面添加或删除数据时,而不是在前面或者中间,并且需要随机访问其中的元素时,使用ArrayList会提供比较好的性能;

当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了

对比来说的话,参考https://blog.csdn.net/hantiannan/article/details/5447567

2.用两个队列模拟堆栈结构

参考https://blog.csdn.net/wangyangkobe/article/details/5910362
到时我再用java实现一下

3.Collection和Map的集成体系

参考我写过的这篇文章https://blog.csdn.net/tryandfight/article/details/79049088

4.Map中的key和value可以为null吗

对于HashMap来说是可以的,对于HashTable来说是不可以的,对应HashMap的值的时候,如果希望输出的结果跟我们输入的结果一致的话,可以用API列名的ListOrderedMap来满足要求。

5.对Java中反射的理解

参考知乎上的理解https://www.zhihu.com/question/24304289

6.写一个ArrayList的动态代理类

public class ArrayList的动态代理类{
    static class ArrayListProxy {
        /**
         * 定义一个返回代理对象的类
         */
        public MyArrayListInterface getArrayListProxy(){
            MyArrayListInterface myArrayListProxy = (MyArrayListInterface) Proxy.newProxyInstance(MyArrayListInterface.class
                    .getClassLoader(), new Class[]{
                    MyArrayListInterface.class
            }, new InvocationHandler() {
                //定义一个myArrayList对象
                private List myArrayList = new MyArrayList();
                @Override
                public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                    //定义记住此时时间的变量
                    long start = System.currentTimeMillis();
                    //执行al的对于方法
                    Object objReturn = method.invoke(myArrayList,proxy);
                    //输出被调用方法执行所需时间
                    System.out.println(method.getName()+"运行时间:"+(System.currentTimeMillis()-start)
                            +"毫秒");
                    //返回被调用方法执行结果
                    return objReturn;
                }
            });
            return myArrayListProxy;
        }
    }
}

/**
 * 定义一个实现MyArrayListInterface的类MyArrayList
 */
class MyArrayList extends ArrayList implements MyArrayListInterface{
    @Override
    public boolean hasNext() {
        return false;
    }

    @Override
    public Object next() {
        return null;
    }
}


/**
 * 定义一个接口,同时继承ArrayList类实现的全部接口
 */
interface MyArrayListInterface<E> extends Serializable,Cloneable,Iterator<E>,
        Collection<E>,List<E>,RandomAccess{

}

这里对原始的ArrayList加上了一个计算运行时间的方法,注意前置增强和后置增强

7.JVM的内存结构和内存分配

参考http://www.importnew.com/19085.html 好文章

8.Java中引用类型都有哪些?

参考http://www.importnew.com/20468.html

9.heap(堆)和stack(栈)有什么区别

参考https://blog.csdn.net/pt666/article/details/70876410

10.解释内存中的堆、栈和方法区的用法

参考https://www.cnblogs.com/dangjunhui/p/5473787.html

猜你喜欢

转载自blog.csdn.net/tryandfight/article/details/79662318