精华内容
下载资源
问答
  • 在此做个总结1.List和Set的区别---List-----可以允许重复的对象-----可以插入null元素-----是一个有序容器,保持着每个元素的插入顺序,输出顺序就是插入顺序-----常用的实现类有ArrayList、LinkedList和Vector-...

    最近在回顾java基础知识,收货颇多,在此做个总结

    1.List和Set的区别

    ---List

    -----可以允许重复的对象

    -----可以插入null元素

    -----是一个有序容器,保持着每个元素的插入顺序,输出顺序就是插入顺序

    -----常用的实现类有ArrayList、LinkedList和Vector

    ---Set

    -----不允许重复对象

    -----无序容器

    -----只允许一个null元素

    -----最流行的实现类HashMap、LinkedHashMap和TreeSet

    2.HashSet是如何保证不重复的

    ---如果hash码值不同,说明是一个新元素,存

    ---如果hash码值相同

    -----如果equals相等,则不存

    -----如果equals不相等,则存

    3.HashMap是线程安全的吗,为什么不是线程安全的

    ---线程不安全

    -----当多个线程共同执行put操作时,可能会导致有一个值没有存入

    -----当HashMap在扩容时,有多个线程操作,会多个线程同时对HashMap扩容,HashMap的对象指针指向最后分配的一个内存

    4.HashMap的扩容过程

    ---检查HashMap的size()是否超过阈值

    -----如果超过,则设置阈值为INT的长度-1

    -----如果不超过,创建新的数组,大小为原HashMap的两倍

    -------将原HashMap中的Entry复制到新的HashMap中

    -------遍历原HashMap的table,遍历table[i]的链表,计算Entry在新HashMap的table中的hash槽位置

    -------将新的Entry添加到对应的hash槽链表的开头,e.next = newTable[i]

    5.final finally finalize

    ---final

    -----被final修饰的类,不能再派生出新的子类,不能作为父类被子类继承 => 一个类不能同时被abstract和final修饰

    -----将变量或方法声明为final,保证在使用过程中不会被修改

    -----被final修饰的变量必须在声明时给出初始值

    -----被final声明的方法只能被使用,不能被重载

    ---finally

    -----try、catch,无论代码是否发生异常,都会执行finally里的代码块

    ---finalize

    -----在垃圾收集器将对象从内存清除出去之前做必要的清理工作

    -----定义在object类中,所有类都继承它

    6.强引用、软引用、弱引用、虚引用

    ---强引用:只要引用还在,垃圾回收器永远不会回收

    ---软引用:非必须引用,内训溢出之前进行回收

    ---弱引用:第二次垃圾回收时回收

    ---虚引用:垃圾回收时回收,无法通过引用取到对象值

    7.Java反射

    ---反射机制:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为反射机制

    ---什么是反射

    -----反射是一种间接操作目标对象的机制,在程序运行时获取或者设置对象自身的信息

    -----只要给定类的名字,就可以通过反射获取类的所有信息,接着便能调用它的所有方法和属性

    ---反射的步骤

    -----获取类加载器:ClassLoader loader = Thread.currentThread().getContextClassLoader()//获取当前线程的上下文类加载器

    -----通过类加载器获取类:Class class = loader.loadClass(“path”)//通过对象的全称限定来获取对象

    -----通过class获得构造函数:Constructors cons = class.getDeclearedConstructors(Class[] null)

    -----通过构造函数构造对象:Car car = (Car)cons.newInstance()//获取类的默认构造函数对象并实例化对象

    -----得到car对象,调用car的方法:Method method = car.getMethod(“setName”, “String.class”)

    -----method.invoke(car, “红旗CA72”)//通过invoke方法,让car的method(setName)方法之行

    8.Arrays.sort实现原理和Collection实现原理

    ---Arrays.sort()

    -----该算法是一个经过调优的快速排序,此算法在很多数据集上提供N*log(N)的性能

    -----对于传入的数组长度在不同的阈值内,分别对应不同的排序算法,主要有归并排序、快速排序、插入排序、记数排序

    -----当byte array字节数组长度大于29时,记数排序优于插排;当short or char array短整型活着字符数组长度大于3200,则记数排序优于快速排序

    ---Collection.sort()

    -----该算法是一个经过修改的合并排序算法,可提供保证的N*log(N)的性能

    -----底层将list转成array,调用Arrays.sort()

    9.LinkedHashMap的应用

    ---概述

    -----是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序,可存储null键和null值,不保证映射的顺序

    -----区别于HashMap,LinkedHashMap维护着一个运行于所有条目的双重链接列表,链接列表定义了迭代顺序,该顺序可以插入或顺序访问

    -----非同步

    ---实现

    -----Entry:除了保存当前对象的引用外,还保存了上一个元素before和下一个元素after的引用,从而构成了双向链接列表

    -----初始化:调用了父类HashMap的相关构造方法来构造一个底层存放的table数组,重写了父类的init(),header.before=header.after=header;

    -----存储:重写了父类的addEntry和createEntry,提供了自己特有的双向链接列表的特性

    -----读取:重写了父类的get方法,在调用父类的getEntry()方法后,判断当前的排序模式accessOrder为true时,记录访问顺序,将最新访问的元素添加到双向链表的表头,并从原来的位置删除

    -----排序模式:定义了排序模式accessOrder,对于访问顺序,为true;对于插入顺序,为false;一般情况下,迭代顺序为默认的插入顺序

    10.cloneable接口实现原理

    ---什么是clone

    -----Clone就是对于给定的一个对象o,得到另一个对象o’,o与o’类型相同,内容相同,就称o’是o的克隆或副本

    ---什么时候使用Clone

    -----当需要修改对象属性,又不想影响原来的属性值

    ---Java对Clone的支持

    -----Object类有clone方法:protected native Object clone() throws CloneNotSupportedException;

    -----Object的clone()方法会检查this.getClass()是否实现了Cloneable, Cloneable只是一个接口标志,用来标志该类是否具备克隆功能

    ---浅克隆、深克隆

    -----Object在对某个对象实施Clone时对其一无所知,仅仅简单的执行域对域的copy;深克隆即对所有的引用进行浅克隆

    11.异常分类以及处理机制

    --异常分类

    ---Throwable:所有异常共同的祖先,指定代码中可用异常传播机制通过Java应用程序传输的任何问题的共性

    -----Error:程序无法处理的错误,表示运行应用程序中较严重的问题,表示代码运行时JVM出现的问题,如:虚拟机运行错误、内存溢出,Error发生时,虚拟机会选择线程终止

    -----Exception:程序本身可以处理的异常

    -------重要的子类:RuntimeException;RuntimeException及其子类表示“JVM常见操作”引发的错误,如:空对象引用、数组下标越界等

    ---Java的异常(包括Error和Exception)分为可查异常和不可查异常

    -----可查异常:编译器要求必须处置的异常,除RuntimeException及其子类外,其他Exception类及其子类都是可查异常

    -----不可查异常:编译器不要求强制处理的异常,包括运行时异常(RuntimeException及其子类)和错误(Error)

    ---Exception异常分两类

    -----运行时异常:都是RuntimeException及其子类异常,包括空指针异常、数组下标越界异常

    -----非运行时异常(编译异常):非RuntimeException以外的异常,类型上属于Exception及其子类

    --异常处理机制

    ---抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序信息,运行时代码负责寻找处置异常的代码并执行

    ---捕获异常:当方法抛出异常后,运行时代码将转为寻找合适的异常处理器

    -----潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合,当异常处理器所能处理的异常与方法抛出的异常类型相符时,即为合适的异常处理器

    ---Throws抛出异常的规则

    -----如果是不可查异常,可以不使用throws关键字来抛出,编译能通过,运行时碰到会被系统抛出

    -----必须声明方法可抛出的任何可查异常

    -----仅当抛出了异常,该方法的调用者才必须处理或者重新抛出异常

    -----调用方法必须遵循任何可查异常的处理和声明规则

    12.wait和sleep的区别

    ---sleep

    -----属于Thread

    -----导致程序暂停指定的时间,让出cpu给其他线程,但它的监控状态一直保持着,当指定时间到了会自动恢复运行状态

    -----sleep()过程中不会释放锁

    ---wait

    -----属于Object

    -----线程会放弃对象锁,进入等待此对象的等待锁定池

    -----只有对该对象调用notify()方法后本线程才进入对象锁定池准备

    13.数组在内存中如何分配

    ---数组的初始化方式

    -----静态初始化:初始化时显式指定每个数组元素的初始值,由系统决定长度

    -----动态初始化:初始化时显式指定数组的长度,由系统为数据每个元素分配初始值

    ---数组的内存分配

    -----如int[] arr = new int[3],在堆中开辟内存int[3],在栈中创建引用arr,arr指向堆中int[3]的地址

    14.JDK1.8新特性

    ---接口支持默认方法,添加关键字default

    ---Lambda表达式

    ---函数式接口:每一个lambda表达式都对应一个类型,通常是接口类型。函数式接口仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法

    ---方法与构造函数引用:关键字来传递方法或者构造函数引用

    ---Predicate接口:只有一个参数,返回boolean,如:Predicate<String> predicate = (s) -> s.length>0

    展开全文
  • sort函数默认可以实现顺序容器的从小到大排序,那么从大到小呢,若容器为二维容器,那么还能使用sort排序吗? 1. 默认从小到大排序 vector<int> vec; //赋值 // //... sort(vec.begin(),vec.end()); 2. 从...

    头文件<algorithm>

    sort函数默认可以实现顺序容器的从小到大排序,那么从大到小呢,若容器为二维容器,那么还能使用sort排序吗?

    1. 默认从小到大排序

    vector<int> vec;
    //赋值
    //
    //...
    sort(vec.begin(),vec.end());

    2. 从大到小排序,把里面的a>b改为a<b就实现从小到大

    //定义一个模板函数,也可以只定义函数,T和要排序的数组里的元素类型
    template<T>
    bool cmp(T a,T b)
    {
        //这样就可以实现从大到小排序了
        return a>b;
    }
    
    int main()
    {
        vector<int> vec;
        //赋值
        //
        //...
        //后面加上cmp参数
        sort(vec.begin(),vec.end(),cmp);
    }

    3. 若待排序数组为一个二维数组

    int main()
    {
        vector<vector<int> > vec;
        //赋值
        //
        //...
        //后面加上cmp参数
        sort(vec.begin(),vec.end());
    }

    默认按照第一维进行从小到大排序

     如[[1,2],[0,3]]→sort(vec.begin(),vec.end());→[[0,3],[1,2]]

    4. 按照第二维从大到小排序

    //就不能使用模板了
    bool cmp(vector<int> a,vector<int> b)
    {
        return a[1]>b[1];
    }
    
    int main()
    {
        vector<vector<int> > vec;
        //赋值
        //
        //...
        //后面加上cmp参数
        sort(vec.begin(),vec.end(),cmp);
    }

    如[[1,2],[0,3]]→→[[0,3],[1,2]]       第二维从大到小(3>2)。

    end

     

     

     

     

     

     

    展开全文
  • 如果是非排序数组或者,其他STL容器,这个方法是可以直接拿过去用的。 class Solution { public: int GetNumberOfK(vector<int> data ,int k) { int count = 0; for (auto iterator = data.begin();...

    统计一个数字在排序数组中出现的次数。 

    为啥非要用二分查找?vector中的迭代器不香吗?如果是非排序数组或者,其他STL容器,这个方法是可以直接拿过去用的。

    class Solution {
    public:
        int GetNumberOfK(vector<int> data ,int k) {
            int count = 0;
            for (auto iterator = data.begin();iterator != data.end();iterator++)
            {
                if(*iterator == k)
                {
                    count++;
                }
            }
            return count;
        }
    };

     

    展开全文
  • Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 13、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 14、...
  • java 面试题 总结

    2009-09-16 08:45:34
    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 11、HashMap...
  • java基础题 很全面

    2009-05-09 09:24:24
    6. 说出ArrayList,Vector, LinkedList的存储性能和特性。 7 7. Collection 和 Collections的区别。 7 8. &和&&的区别。 8 9. HashMap和Hashtable的区别。 8 10. final, finally, finalize的区别。 8 11. sleep() 和 ...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    面试题151 鸡尾酒排序(改进的冒泡排序) 171 面试题152 什么是选择排序 172 面试题153 什么是直接插入排序 173 面试题154 什么是归并排序 174 面试题155 什么是快速排序 176 面试题156 什么是希尔(Shell)排序 177...
  • java面试宝典

    2013-02-28 16:04:01
    238、EJB容器提供的服务 56 239、EJB的角色和三个对象 56 240、EJB的几种类型 56 241、bean 实例的生命周期 56 242、激活机制 56 243、remote接口和home接口主要作用 56 244、客服端调用EJB对象的几个基本步骤 56 ...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    238、EJB容器提供的服务 56 239、EJB的角色和三个对象 56 240、EJB的几种类型 56 241、bean 实例的生命周期 56 242、激活机制 56 243、remote接口和home接口主要作用 56 244、客服端调用EJB对象的几个基本步骤 56 ...
  • 最新Java面试宝典pdf版

    热门讨论 2011-08-31 11:29:22
    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...
  • Java面试宝典2010版

    2011-06-27 09:48:27
    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 2、Java有没有goto? 3、说说&和&&的区别。 4、在JAVA中如何跳出当前的多重嵌套循环? 5、switch语句能否作用在byte上,能否作用在long上...
  • 28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 29、super.getClass()方法调用 21 30、String是最基本的数据类型吗? 22 31、String s = ...
  • java面试题

    2018-01-01 15:35:15
    4. 说出ArrayList,Vector,LinkedList的存储性能和特性 8 5. EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 9 6. Collection 和 Collections的区别。 9 7. &...
  • 3.7.1 向量—vector 46 3.7.2 范围检查 47 3.7.3 表—list 48 3.7.4 映射—map 49 3.7.5 标准容器 49 3.8 算法 50 3.8.1 迭代器的使用 51 3.8.2 迭代器类型 52 3.8.3 迭代器和i/o 53 3.8.4 遍历和谓词 54 ...
  • 3.7.1 向量—vector 46 3.7.2 范围检查 47 3.7.3 表—list 48 3.7.4 映射—map 49 3.7.5 标准容器 49 3.8 算法 50 3.8.1 迭代器的使用 51 3.8.2 迭代器类型 52 3.8.3 迭代器和i/o 53 3.8.4 遍历和谓词 54 ...
  • C++程序设计语言(特别版)--源代码

    热门讨论 2012-04-23 07:33:51
    3.7.1 向量—vector 46 3.7.2 范围检查 47 3.7.3 表—list 48 3.7.4 映射—map 49 3.7.5 标准容器 49 3.8 算法 50 3.8.1 迭代器的使用 51 3.8.2 迭代器类型 52 3.8.3 迭代器和i/o 53 3.8.4 遍历和谓词 54 ...
  • Java程序员面试宝典pdf

    热门讨论 2013-02-21 13:06:13
    面试题159 JPA可以在EJB容器以外的地方使用吗? 293 14.3 小结 296 第5篇 算法和设计模式 第15章 Java编程试题( 教学视频:70分钟) 298 15.1 基础编程试题 298 面试题160 打印出100以内的素数 298 面试题161 打印...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    application或者applet中与servlet/jsp通信可以采用的方式。 31.简述逻辑操作(如&,|)与条件操作(如&&,||)的区别。 32.简述 Java Server Page 和 Servlet 的联系和区别。 33.简述synchronized和java.util....
  • java面试题典 java 面试题 经典

    热门讨论 2010-06-18 13:42:36
    6. 说出ArrayList,Vector, LinkedList的存储性能和特性。 8 7. Collection 和 Collections的区别。 8 8. &和&&的区别 8 9. HashMap和Hashtable的区别。 8 10. final, finally, finalize的区别。 9 11. Overload和...
  • c++常见容器,vector容器capacity和size区别,如何动态增长 vector遍历有哪几种方式(尽可能多) cv:Mat 有几种访问方式 map容器增删改查,和unorder_map区别,map底层如何实现 c++智能指针 c++14/17新特性 ...
  • 疯狂JAVA讲义

    2014-10-17 13:35:01
    7.4.2 ArrayList和Vector实现类 264 7.4.3 固定长度的List 266 7.5 Queue接口 266 7.5.1 LinkedList实现类 266 7.5.2 PriorityQueue实现类 269 7.6 Map 270 7.6.1 HashMap和Hashtable实现类 271 7.6.2 ...
  • Java 面试宝典

    2013-02-01 10:02:08
    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? ...... 7 2、Java 有没有 goto? .......................................................................................................

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

vector容器可以排序吗