首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何编写高质量的代码

进行排序不推荐使用binarySearch对列表进行检索;集合中的元素必须做到compareTo和equals同步;使用shuffle打乱列表;减少HashMap中元素的数量;多线程使用Vector或HashTable...JVM不可能输出Array类型,因为Array是属于java.lang.reflect包的,它是通过反射访问数组元素的工具类。...使用Comparator进行排序 (Comparable接口可以作为实现类的默认排序法,Comparator接口则是一个类的扩展排序工具)(两种数据排序实现方式:1、实现Comparable接口,必须要实现...不推荐使用binarySearch对列表进行检索; (indexOf与binarySearch方法功能类似,只是使用了二分法搜索。使用二分查找的首要条件是必须要先排序,不然二分查找的值是不准确的。...对于可变量的集合,需要自己手动进行再排序)(SortedSet中的元素被修改后可能会影响其排序位置)。

1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    2020年Java基础高频面试题汇总(1.4W字详细解析)

    子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写...另外StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。...,被分配到同一个索引上的多个节点可以用这个单向链表进行存储. (2)开放定址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入 (3)再哈希:又叫双哈希法...按操作方式分类结构图: 按操作对象分类结构图: 30、 Java IO与 NIO的区别(补充) NIO即New IO,这个库是在JDK1.4中才引入的。...在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。 这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。 (2)哪里会用到反射机制?

    60711

    32道Java基础面试题,哪些你还不会?(1.4W字详细解析)

    子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写...另外StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。...,被分配到同一个索引上的多个节点可以用这个单向链表进行存储. (2)开放定址法:一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入 (3)再哈希:又叫双哈希法...按操作方式分类结构图: ? 按操作对象分类结构图: ? 30、 Java IO与 NIO的区别(补充) NIO即New IO,这个库是在JDK1.4中才引入的。...在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。 这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。 (2)哪里会用到反射机制?

    42520

    Q&A:Java

    Java是面向对象的嘛,集合里面只能存储对象 重载和重写的区别 重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同),与方法返回值和访问修饰符无关。...StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。 StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。...Java编译器是通过先检查代码中泛型的类型,然后在进行类型擦除,再进行编译。 编译时,检查添加元素的类型,更安全,减少了类型转换次数,提高效率。...运行期通过反射处理 :像框架中自带的注解(比如 Spring 框架的 @Value 、@Component)都是通过反射来进行处理的。...实现SortedMap接口让 TreeMap 有了对集合中的元素根据键排序的能力。默认是按 key 的升序排序,不过我们也可以指定排序的比较器。

    63120

    Java集合基础知识

    本来在 HashMap 中,发生哈希冲突是可以用链表法或者红黑树来解决的,但是在多线程中,可能 就直接给覆盖了。...当然 Java 里的数组是无法自动扩的,方法是使用一个新的数组代替已有的容量小的数组,就像我们用一个小桶装水,如果想装更多的水,就得换大水桶。...它提供了对集合对象进行基本操作的通用接口方法。 java.util.Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、 线程安全等操作。...Timsort的核心过程: TimSort 算法为了减少对升序部分的回溯和对降序部分的性能倒退,将输入按其升序和降序特点进行了分 区。...排序的输入的单位不是一个个单独的数字,而是一个个的块-分区。其中每一个分区叫一个run。针对这 些 run 序列,每次拿一个 run 出来按规则进行合并。每次合并会将两个 run合并成一个 run。

    5710

    JAVA入门1 原

    2.8如何在Java中使用注释 在编写程序时,经常需要添加一些注释,用以描述某段代码的作用。 一般来说,对于一份规范的程序源代码而言,注释应该占到源代码的 1/3 以上。...因此,注释是程序源代码的重要组成部分,一定要加以重视哦! Java 中注释有三种类型:单行注释、多行注释、文档注释 ? 运行结果: Hello Imooc!...param 对方法中某参数的说明 @return 对方法返回值的说明        @exception 对方法可能抛出的异常进行说明 三.常用的运算符 3.1分类 Ø 算术运算符 Ø 赋值运算符 Ø...Arrays 中常用的方法: 1、 排序 语法:  Arrays.sort(数组名); 可以使用 sort( ) 方法实现对数组的排序,只要将数组名放在 sort( ) 方法的括号中,就可以完成对该数组的排序...(按升序排列),如: ?

    2.6K20

    Java中的注解,自定义注解

    注解可以在类编译、运行时进行加载,体现不同的功能。 2. 注解与注释 注解也可以看做是一种注释,通过使用 Annotation,可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。...但是,注解,不同于单行注释和多行注释。 对于单行注释和多行注释是给程序员看的。 而注解是可以被编译器或其他程序读取的。程序还可以根据注解的不同,做出相应的处理。 3....,如果没有参数就不能写 @return: 对方法返回值的说明,如果方法的返回值类型是void就不能写 @exception: 对方法可能抛出的异常进行说明 ,如果方法没有用throws显式抛出的异常就不能写...自定义注解 一个完整的注解应该包含三个部分: (1)声明、 (2)使用、 (3)读取 声明自定义注解: 【元注解】 【修饰符】 @interface 注解名{ 【成员列表】 } 自定义注解可以通过四个元注解...返回值类型只能是八种基本数据类型、String类型、Class类型、enum类型、Annotation类型、以上所有类型的数组 可以使用 default 关键字为抽象方法指定默认返回值 如果定义的注解含有抽象方法

    53730

    备战Java

    Set:无序,不可重复List 实现类:ArrayList----按顺序存放数据的数组 LinkedList-----按顺序存放数据的链表Set 实现类:HashSet----根据 HashCode()...通过反射,可以在运⾏时获取类的成员变量、⽅法、构造函数等信息,并可以在运⾏时调⽤对象的⽅法,创建对象的实例,操作对象的属性等。...Method类:表⽰类的⽅法类型,通过该类可以调⽤类的⽅法。反射机制在Java中具有⼴泛的应⽤,例如:动态代理:可以通过反射⽣成实现了某个接⼝的代理类,实现动态代理。...;//表⽰获取本类中的⼀个指定的⽅法,不包括继承的⽅法⽅法签名包括:⽅法的名字,参数的Class类型列表37....BY 对数据进行排序的时候,就需要对分组或者排序的字段进行索引 。

    21120

    Java面试:2021.05.23

    上一步说到的链表是拉链法: 将链表和数组相结合.也就是说创建一个链表数组,数组中每一格就是一个链表.若约到哈希冲突,则将冲突的值加到链表中即可。...如果链表的长度超过8则转为红黑树, 也就是该位置存储的是数组+红黑树结构. 当链表长度小于等于6时又变为链表, 也就是该位置存储的是数组+链表结构. 链表法采用的是尾插法....可以保持插入顺序 TreeSet 可以按对象自然排序,或按比较器排序 HashSet 无序 Map,双列数据集合(包含键、值两部分),键不允许重复,值可以重复,同样根据实现类不同...,key 可能有序或无序 LinkedHashMap 可以让 key 按插入有序 TreeMap 可以让 key 按自然排序,或按比较器排序 HashMap 的 key 无序...List List 列表是简单的字符串列表(双向列表), 按照插入顺序排序, 可以添加一个元素到列表的头部(左边)或者尾部(右边) 常用命令:lpush、rpush、lpop、rpop、lrange(获取列表片段

    59130

    Java高级工程师常见面试题(一)-Java基础「建议收藏」

    需要维护元素的插入顺序,因此性能略低于HashSet的性能,但遍历将有很好的性能(链表很适合进行遍历)。 1.2) SortedSet主要用于排序操作,实现此接口的子类都属于排序的子类。...默认按元素的添加顺序设置元素的索引。 2.1) ArrayList是基于数组实现的List类,它封装了一个动态的增长的、允许再分配的Object[]数组。...② 按上述算法建立起来的哈希表,删除工作非常困难。如果将此元素删除,查找的时会发现空槽,则会认为要找的元素不存在。只能标上已被删除的标记,否则,将会影响以后的查找。 ③ 线性探测法很容易产生堆聚现象。...而拉链法中可取α≥1,且结点较大时,拉链法中增加的指针域可忽略不计,因此节省空间; ④在用拉链法构造的散列表中,删除结点的操作易于实现。只要简单地删去链表上相应的结点即可。...拉链法的缺点:拉链法的缺点是:指针需要额外的空间,故当结点规模较小时,开放定址法较为节省空间,而若将节省的指针空间用来扩大散列表的规模,可使装填因子变小,这又减少了开放定址法中的冲突,从而提高平均查找速度

    67520

    JAVA注解

    显示的成员列表中 发生这些变化并不会影响编译,只是提醒一下程序员,这个方法以后是要被删除的,最好别用。 Deprecated注解还有一个作用。...而不能为其它的任何语言元素进行注解。因此,MyAnnotation自然也不能为Class1进行注解了。 说到这,大家可能已经基本明白了。原来target所指的目标就是java的语言元素。...如只允许对方法和构造函数进行注解可以写成: @Target({ElementType.METHOD,  ElementType.CONSTRUCTOR}) @interface MyAnnotation...解决这个问题就需要使用java最令人兴奋的功能之一:反射(reflect)。 在以前的JDK版本中,我们可以使用反射得到类的方法、方法的参数以及其它的类成员等信息。...在使用反射之前必须使用import java.lang.reflect.* 来导入和反射相关的类。

    1.4K20

    12道囊括重要的东西的 Java 基础问题

    在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中同一方法)。...StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。  ...hashCode()在散列表中才有用,在其它情况下没用。在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置。...•缺点: 性能瓶颈:反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的java代码要慢很多。 反射的应用场景 反射是框架设计的灵魂。...它用来描述各种程序设计语言(不只是Java)中方法参数传递方式。 Java程序设计语言总是采用按值调用。

    54430

    那些经常被遗忘的 Java 面试题

    反射 反射API中提供的动态代理也是非常强大的功能,可以原生实现AOP中 的方法拦截功能。正如英文单词reflection的含义一样,使用反射API的时候就好像在看一个Java类在水中的倒影一样。...知道了Java类的内部 结构之后,就可以与它进行交互,包括创建新的对象和调用对象中的方法等。 这种交互方式与直接在源代码中使用的效果是相同的,但是又额外提供了运行时刻的灵活性。...Java 反射API的第一个主要作用是获取程序在运行时刻的内部结构。...多路归并算法 归并排序也是一种使用分治法来实现的有效排序算法,它是现代计算机创始人John von Neumann于1945年发明的。...归并排序的思路如下(以二路归并为例): 将数组划均分为两个子数组; 对两个字数组进行排序; 将排序好的两个字数组归并。 所谓 N路归并 是指将数组均分为N个子数组,将字数组排序后再归并。

    37410

    【2022最新Java面试宝典】—— Java基础知识面试题(91道含答案)

    什么Java注释 定义:用于解释说明程序的文字 分类 单行注释 格式: // 注释文字 多行注释 格式: /* 注释文字 */ 文档注释 格式:/** 注释文字 */ 作用 在程序中,尤其是复杂的程序中...在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖 接口中同一方法)。 36. 什么是多态机制?Java语言是如何实现多态的?...重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不同、顺序不同),与 方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分 重写:发生在父子类中,方法名、参数列表必须相同...引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是 变量所对应的内存空间的地址。...StringBuffer对方法加了同步锁或者对调用的方法加了同 步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。

    70630

    【原创】Java基础面试题①

    List集合: ArrayList:本质是一个动态数组,当添加到集合的最后一位时,会自动进行扩容,扩容为原理长度的1.5倍。轻量级,查询快,增删慢。...(线程不安全) LinkedList:本质是一个双向链表,提供了头插法和尾插法。增删快,查询慢,占用内存较小。 3....TreeSet:有序集合,底层是TreeMap,本质是红黑树,相对于HashSet,TreeSet提供了一些额外的按排序位置访问的方法,TreeSet的排序分为两种,一种是自然排序,一种是定制排序。...反射的介绍: 反射是Java中的一种动态机制,在程序运行期间动态获取指定类中的属性,执行指定类中方法的一种技术。 2....需要序列化的原因: 如果需要持久化将Java对象保存到文件中,或在网络中传输Java对象,则需要将对象进行序列化操作。 2.

    29810

    历年阿里面试题汇总(2017年不断更新中)

    这个规则和前面两个规则一起构成了:两个volatile变量操作不能够进行重排序; 除以上三种情况以外可以进行重排序。...2、Collections.sort() 该算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素效益高子列表中的最低元素,则忽略合并)。...此算法可提供保证的N*log(N)的性能,此实现将指定列表转储到一个数组中,然后再对数组进行排序,在重置数组中相应位置处每个元素的列表上进行迭代。...这避免了由于试图原地对链接列表进行排序而产生的n2log(n) n^2log(n)性能。...友情链接 :Java中堆内存和栈内存详解 ---- 反射讲一讲,主要是概念,都在哪需要反射机制,反射的性能,如何优化?

    61020

    算法基础9:散列表

    前面系列文章: 归并排序 #算法基础#选择和插入排序 由快速排序到分治思想 算法基础:优先队列 二分查找 二叉树查找 平衡查找树概述 平衡树之红黑树 散列表是我们比较简单的一种查找算法,是用这种建议方法的扩展并能够处理更加复杂的类型的键...我们可以通过算数操作将键转化为数组的索引来访问数组中的键值对。 使用散列表的查找算法分为两步 第一步用散列函数将被查找的键转化为数组的一个索引。...一、散列函数键值转换 散列算法有很多种实现,在java中没中类型都需要相应的散列函数,例如;在正整数 最常用的是除留余数法(k%M)。...大家一致用的java的HashMap 就是按这种方式来处理碰撞冲突问题的。 ?...这种结构可以实现对数据进行快速的存取。HashMap的实现及HashSet的实现

    64320
    领券