分类 Java 下的文章

360笔试



这道题想了下还有种方法

import java.util.*;

/**
 * Created by Administrator on 2018/8/29.
 */
public class Test3 {

    public static void main(String[] args) {
        Scanner cin=new Scanner(System.in);
        int n=cin.nextInt();
        int m=cin.nextInt();
        int[] count=new int[n];
        for (int i = 0; i < count.length; i++) {
            count[i]=cin.nextInt();
        }
        int ques=cin.nextInt();
        int[][] visit=new int[ques][2];
        for (int i = 0; i < ques; i++) {
            visit[i][0]=cin.nextInt();
            visit[i][1]=cin.nextInt();
        }
       List<Integer> list= getList(n,m,count,visit);
        Iterator it=list.iterator();

       while (it.hasNext()){
           System.out.println(it.next());
       }
    }

    public static List<Integer> getList(int n,int m,int[] count,int[][] visit){
        List<Integer> res=new ArrayList<>();
        for(int i=0;i<visit.length;++i){//开始小红的Q个问题
            Set<Integer> set=new HashSet<>();//因为记录小明看花的种类,重复的不算,所以用set
            for (int j = visit[i][0]-1; j <visit[i][1]-1 ; j++) {//j从小红的问的第l次到r次,减一是因为下标从0开始
                set.add(count[j]);//第j次所对应的count[j]的值,也就是小明看花的种类:count[j]
            }
            res.add(set.size());//set.size()也就是小明看过的种类总数
        }
        return res;
    }

}

HashMap源码


前提知识:

首先要知道哈希表, 哈希表(Hash table,也叫散列表)
哈希表的思路:当我知道key值以后,我就可以直接计算出这个元素在集合中的位置,根本不需要一次又一次的查找!

正文:

Lrucache用到了LinkedHashMap

前面都是线性结构,用到Object[] 或者链表这样的线性结构

HashMap里面存的是键值对 key value ,包含两个数据项,合起来叫entry(一种叫法)。
默认传入4,0.75

public HashMap() {
        this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR);
    }


队列源码


队列如果用数组的话,入队就是在队尾插入一个元素没有问题,但是如果要出队的话

容易造成假溢出(明明前面还有空位但是不能用到)

2.如果用出队一个元素后,将所有后面的元素往前移的话,出队的复杂度高。

用循环队列(顺序存储)可以解决家溢出。

最好还是用链式结构(不同于栈,栈用顺序存储比较好)
public interface Queue<E> extends Collection<E>
Java里面是一个接口
入队:boolean offer(E e);
出队: E poll();


Stack源码(一)


继承于Vector

Vector跟ArrayList有点像,也是用数组保存元素。
newElementArray方法类似于toArray
也有add方法,意味着Stack有可能继承这个方法,还有remove,contains等等方法。同时还有迭代器内部类。

hashCode是在Object类中的,其他类都是继承Object类的。
Vector中的capacityIncrement是扩容因子,在原先的栈已经满的时候,扩容一定数量的空间。

private void growByOne() {
        int adding = 0;
        if (capacityIncrement <= 0) {
            if ((adding = elementData.length) == 0) {
                adding = 1;
            }
        } else {
            adding = capacityIncrement;
        }

        E[] newData = newElementArray(elementData.length + adding);
        System.arraycopy(elementData, 0, newData, 0, elementCount);
        elementData = newData;
    }


shijiebei 365bet manbetx 188bet xinshui caipiao 95zz tongbaoyule beplay 88bifa 18luck betway bwin hg0088 aomenjinshayulecheng ca88 shenbotaiyangcheng vwin w88 weide