面向新人的 Java 面试问题(101-150)

news2024/11/24 4:24:28

101.什么是多态?

多态性被定义为能够采用多种形式的能力。它有两种类型,即编译时多态性或方法重载 - 在编译时调用的函数。例如,以“面积”类为例。根据参数数量,它可以计算正方形、三角形或圆形的面积。运行时多态性或方法覆盖 - 在运行时链接。类中的方法会覆盖父类的方法。

102. 什么是运行时多态性或动态方法分派?

动态方法分派是运行时方法重写的解决机制。方法重写是指子类中的方法与超类中的方法具有相同的名称、参数和返回类型。当通过超类引用调用被重写的方法时,java 会根据调用时所引用的对象类型来确定要执行该方法的哪个版本(超类或子类)。因此,决定是在运行时做出的。这称为动态方法分派。

103. 什么是方法覆盖?

方法覆盖,也称为运行时多态性,是指子类包含与父类相同的方法。例如,我们在父类中有一个名为“gfg()”的方法。在子类中再次定义了方法 gfg()。因此,当在子类中调用 gfg() 时,将执行类中的方法。在这里,类中的 gfg() 覆盖了外部的方法。

Java-768 中的重载

方法重写是 Java 中实现运行时多态性的一种方法。方法重写是一种功能,允许子类提供其父类之一已提供的方法的特定实现。当子类中的方法与其父类中的方法具有相同的名称、相同的参数或签名以及相同的返回类型(或子类型)时,则称子类中的方法重写了超类中的方法。

104. 什么是方法重载?

在 Java 中,方法重载允许不同的方法具有相同的名称,但具有不同的签名,其中签名可以根据输入参数的数量或输入参数的类型或两者的混合而不同。

Java 中的方法重载也称为编译时多态性静态多态性或早期绑定。在方法重载中,与父参数相比,子参数将获得最高优先级。  

105. 我们可以覆盖静态方法吗?

不可以,因为静态方法是类的一部分而不是对象的一部分,所以我们不能覆盖它们。

106. 我们可以覆盖重载方法吗?

是的,因为在编译器看来,重载方法是一种完全不同的方法。覆盖完全不是一回事。调用哪种方法的决定将推迟到运行时。

107. 我们可以重载main()方法吗?

是的,在 Java 中,我们可以重载 main 方法,借助其预定义的调用方法来调用 main 方法。 

108. 什么是方法重载和方法重写?

方法重载:也称为编译时多态性。在方法重载中,两个或多个方法在同一个类中以不同的签名共享。 

例子:

// Java Program to demonstrate use of Method Overloading
import java.io.*;
class GFG {
    static int multiply(int a, int b) { return a * b; }
    static int multiply(int a, int b, int c)
    {
        return a * b * c;
    }
    static int multiply(int a, int b, int c, int d)
    {
        return a * b * c * d;
    }
    public static void main(String[] args)
    {
        System.out.println("multiply() with 2 parameters");
        System.out.println(multiply(4, 5));
        System.out.println("multiply() with 3 parameters");
        System.out.println(multiply(2, 3, 4));
        System.out.println("multiply() with 4 parameters");
        System.out.println(multiply(2, 3, 4, 1));
    }
}

输出

multiply() with 2 parameters
20
multiply() with 3 parameters
24
multiply() with 4 parameters
24

方法重写:当子类可以提供父类或超类中已定义的方法的实现时,就会发生方法重写。返回类型、名称和参数必须与超类中的方法相似。

例子:

// Java Program to demonstrate use of Method Overriding
import java.io.*;
class Vehicle {
    void drive()
    {
        System.out.println("drive() method of base class");
        System.out.println("driving the Car.");
    }
}
class Car extends Vehicle {
    void drive()
    {
        System.out.println(
            "drive() method of derived class");
        System.out.println("Car is driving.");
    }
}
class GFG {
    public static void main(String[] args)
    {
        Car c1 = new Car();
        Vehicle v1 = new Vehicle();
        c1.drive();
        v1.drive();
        Vehicle vehicle = new Car();
        // drive() method of Vehicle class is overridden by
        // Car class drive()
        vehicle.drive();
    }
}

输出

drive() method of derived class
Car is driving.
drive() method of base class
driving the Car.
drive() method of derived class
Car is driving.

方法重载

方法重写

当同一个类中两个或多个方法具有不同的参数但名称相同时。

当子类提供其自己对父类中已定义的方法的实现时。

方法重载只能发生在同一个类中或者子类或父类之间。

方法覆盖只能在子类中发生。

当发生错误时,它会在程序编译时被捕获。

当发生错误时,它会在程序运行时被捕获。

编译时多态性的示例。

运行时多态性的示例。

方法重载可能需要或不需要继承。

方法覆盖总是需要继承。

它发生在课堂上。

它是在两个有继承关系的类中进行的。

109. 我们可以覆盖私有方法吗?

Java 中无法覆盖私有方法。方法覆盖是指实现子类中的方法而不是父类中的方法。私有方法只能在声明它的类中访问。由于此方法对其他类不可见且无法访问,因此无法覆盖。 

110. 我们可以在子类中改变重写方法的作用域吗?

在 Java 中,无法修改重写方法的范围。子类方法的范围必须等于或大于超类方法的重写方法的范围。例如,如果超类中的重写方法具有公共范围,则子类中的重写方法可以具有公共范围或更易于访问的范围(如 protected 或 default)。但是,它不能具有更排他性的范围(如 private)。

111. 在子类中重写超类方法时,可以修改其 throws 子句吗?

我们可以修改超类方法的 throws 子句,但有一些限制,我们可以在子类中重写超类方法时更改其 throws 子句。如果超类方法未声明任何异常,则子类重写方法只能指定未检查异常。如果超类方法声明了异常,则子类方法可以声明相同的异常、子类异常或根本不声明异常。但是,子类方法不能声明比超类方法中声明的父类异常更广泛的父类异常。

112. Java 中可以使用虚函数吗?

是的,Java 支持虚拟函数。函数默认是虚拟的,可以使用 final 关键字将其变为非虚拟的。

113. 什么是抽象?

抽象是指表示基本特征而不包括背景细节的行为。详细信息或实现被隐藏。最常见的抽象示例是汽车,我们知道如何启动引擎、加速和行驶,但是,引擎的工作方式及其内部组件是隐藏在一般用户之外的复杂逻辑。通常这样做是为了处理复杂性。

114.什么是抽象类?

声明为抽象的类无法实例化,即无法创建对象。它可能包含或不包含抽象方法,但如果类至少有一个抽象方法,则必须将其声明为抽象。

具有抽象方法的抽象类的示例:

// Java Program to implement
// abstract method
import java.io.*;
// Abstract class
abstract class Fruits {
    abstract void run();
}
// Driver Class
class Apple extends Fruits {
    void run()
    {
        System.out.println("Abstract class example");
    }
    // main method
    public static void main(String args[])
    {
        Fruits obj = new Apple();
        obj.run();
    }
}

输出

Abstract class example

115. 何时使用抽象方法?

当我们想要使用一种方法但希望子类来决定实现时,就会使用抽象方法,在这种情况下,我们对父类使用抽象方法。

116. 如果基类实现了 Serializable 接口,如何避免在子类中序列化?

如果基类实现了 Serializable 接口,那么我们可以通过定义 writeObject() 方法并抛出 NotSerializableException() 来避免子类中的序列化。

117. Java 中的集合框架是什么?

集合是 Java 中的对象单位。集合框架是 Java 中的一组接口和类,用于以各种方式表示和操作对象集合。集合框架包含类(ArrayList、Vector、LinkedList、PriorityQueue、TreeSet)和多个接口(Set、List、Queue、Deque),其中每个接口用于存储特定类型的数据。

118. 解释 Collection 框架中使用的各种接口。

集合框架实现

  1. Collection 接口
  2. List 接口
  3. Set 接口
  4. Queue 接口
  5. Deque 接口
  6. Map 接口

Collection 接口: Collection 是可用的主要接口,可以使用 java.util.Collection 导入。

句法:

public interface Collection<E> extends iterable

119. 如何在 Java 中同步 ArrayList?

ArrayList 可以使用下面提到的两种方法进行同步:

  1. 使用 Collections.synchronizedList()
  2. 使用 CopyOnWriteArrayList

使用 Collections.synchronizedList():

public static List<T> synchronizedList(List<T> list)

使用 CopyOnWriteArrayList:

  1. 创建一个空列表。
  2. 它实现了 List 接口
  3. 它是 ArrayList 的线程安全变体
  4. T 代表通用

120. 当我们在 Java 中拥有 Vectors (它们是同步的)时,为什么我们需要一个同步的 ArrayList?

由于某些原因,即使我们有 Vector,也需要 ArrayList:

  1. ArrayList 比 Vectors 更快。
  2. ArrayList 支持多线程,而 Vectors 仅支持单线程使用。
  3. ArrayList 使用起来更安全,因为 Vectors 支持单线程,而单个操作的安全性较低且同步时间较长。
  4. 由于向量的同步特性,它在 Java 中被认为已经过时了。

121.为什么我们不能创建一个通用数组?

无法创建泛型数组,因为数组在运行时会携带其元素的类型信息,因此如果元素的类型不相似,则会在运行时抛出“ArrayStoreException”。由于泛型类型信息在编译时被类型擦除所擦除,因此数组存储检查会通过,而它本应失败。

122. 你能解释一下 Java 中常规数组和 ArrayList 的元素在内存中是如何存储的吗?请解释一下。

Java 中常规数组的元素存储在连续的内存位置中,这意味着每个元素都存储在连续的内存块中。这样就可以通过索引轻松访问任何元素,因为可以使用数组的基地址和每个元素的大小来计算地址

相比之下,ArrayList 类实现了动态数组,这意味着其大小可以随着元素的添加或删除而改变。ArrayList 元素也存储在连续的内存位置,类似于数组。但是,当 ArrayList 达到其容量并需要添加更多元素时,将创建一个新的、更大的底层数组。然后将旧数组中的元素复制到新数组中。此过程确保 ArrayList 可以动态增长,同时将元素保持在连续的内存位置中。

123.解释将ArrayList转换为Array以及将Array转换为ArrayList的方法。

将 List 转换为 ArrayList

有多种方法可以将 List 转换为 ArrayList

将数组转换为数组列表-768

程序员可以使用 Arrays 类的 asList() 方法将 Array 转换为 ArrayList。它是 Arrays 类的一个静态方法,接受 List 对象。

句法:

Arrays.asList(item)
// Java program to demonstrate conversion of
// Array to ArrayList of fixed-size.
import java.util.*;
// Driver Class
class GFG {
    // Main Function
    public static void main(String[] args)
    {
        String[] temp = { "Abc", "Def", "Ghi", "Jkl" };
        // Conversion of array to ArrayList
        // using Arrays.asList
        List conv = Arrays.asList(temp);
        System.out.println(conv);
    }
}
输出
[Abc, Def, Ghi, Jkl]
ArrayList 到 Array 的转换

將ArrayList轉換為Array-768

Java 程序员可以将 ArrayList 转换为

句法:

List_object.toArray(new String[List_object.size()])
import java.util.List;
import java.util.ArrayList;

// Driver Class
class GFG {
    // Main Function
    public static void main(String[] args) {
        // List declared
        List<Integer> arr = new ArrayList<>();
        arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.add(2);
        arr.add(1);
        
        // Conversion
        Object[] objects = arr.toArray();
        
        // Printing array of objects
        for (Object obj : objects)
            System.out.print(obj + " ");
    }
}
输出
1 2 3 2 1

124.ArrayList的大小如何动态增长?并说明其内部是如何实现的。

由于 ArrayLists 基于数组的特性,它的大小会动态增长,以确保始终有足够的空间容纳元素。首次创建 ArrayList 元素时,默认容量约为 10-16 个元素,这主要取决于 Java 版本。当原始数组的容量已满时,ArrayList 元素会从原始数组复制到新数组。随着 ArrayList 大小的动态增加,该类会创建一个更大大小的新数组,并将所有元素从旧数组复制到新数组。现在,新数组的引用在内部使用。动态增加数组的过程称为调整大小。 

125. Java 中的 Vector 是什么?

Java 中的向量与之类似,可以在其中存储多个元素。向量遵循以下某些规则:

  1. 可以使用 Java.util.Vector 导入 Vector。
  2. 向量是使用动态数组实现的,因为向量的大小根据插入到其中的元素而增加或减少。 
  3. 使用索引号的向量元素。
  4. 向量本质上是同步的,这意味着它们只使用单个线程(在特定时间只执行一个过程)。
  5. 向量包含许多不属于集合框架的方法。

句法:

Vector gfg = new Vector(size, increment);

126. 如何使 Java ArrayList 为只读?

仅使用 Collections 提供的 Collections.unmodifiableList() 方法即可准备好 ArrayList。 

句法:

array_readonly = Collections.unmodifiableList(ArrayList);

例子:

import java.util.*;

public class Main {
    public static void main(String[] argv) throws Exception {
        try {
            // creating object of ArrayList
            ArrayList<Character> temp = new ArrayList<>();
            // populate the list
            temp.add('X');
            temp.add('Y');
            temp.add('Z');
            // printing the list
            System.out.println("Initial list: " + temp);
            
            // getting readonly list
            // using unmodifiableList() method
            List<Character> new_array = Collections.unmodifiableList(temp);
            
            // printing the list
            System.out.println("ReadOnly ArrayList: " + new_array);
            
            // Attempting to add element to new Collection
            System.out.println("\nAttempting to add element to the ReadOnly ArrayList");
            new_array.add('A');
        } catch (UnsupportedOperationException e) {
            System.out.println("Exception is thrown : " + e);
        }
    }
}

输出

Initial list: [X, Y, Z]
ReadOnly ArrayList: [X, Y, Z]

Attempting to add element to the ReadOnly ArrayList
Exception is thrown : java.lang.UnsupportedOperationException

127. Java中的优先级队列是什么?

优先级队列-768

优先级队列是一种类似于常规队列或堆栈数据结构的抽象数据类型。元素中存储的元素取决于从低到高定义的优先级。PriorityQueue 基于优先级堆。

句法:

import java.util.*;

class PriorityQueueDemo {
    // Main Method
    public static void main(String args[]) {
        // Creating empty priority queue
        PriorityQueue<Integer> var1 = new PriorityQueue<Integer>();
        // Adding items to the pQueue using add()
        var1.add(10);
        var1.add(20);
        var1.add(15);
        // Printing the top element of PriorityQueue
        System.out.println(var1.peek());
    }
}
输出
10

128.解释 LinkedList 类。

LinkedList 类是使用双向链表存储元素的 Java 类。它继承了 AbstractList 类并实现了 List 和 Deque 接口。LinkedList 类的属性如下:

  1. LinkedList 类是非同步的。
  2. 保持插入顺序。
  3. 它可以用作列表、堆栈或队列。

句法:

LinkedList<class> list_name=new LinkedList<class>();

129.Java中的Stack类是什么,它提供的各种方法有哪些?

Java 中的 Stack 类是一种 LIFO 数据结构,它实现了后进先出数据结构。它派生自 Vector 类,但具有特定于堆栈的功能。Java 中的 Stack 类提供以下方法:

  • peek():返回堆栈顶部的项目,但不将其移除
  • empty():如果堆栈为空,则返回 true,否则返回 false
  • push():将一个元素推到堆栈顶部
  • pop():移除并返回堆栈顶部的项目
  • search():返回对象从堆栈顶部开始的第 1 个基本位置。如果对象不在堆栈中,则返回 -1

130. Java Collections 框架中的 Set 是什么?列出它的各种实现?

集合是不存储重复元素的集合。它们不保留元素的任何顺序。Java 集合框架提供了 Set 接口的几种实现,包括:

  • HashSet: Java 中的 HashSet 将元素存储在哈希表中,从而提供更快的查找和插入速度。HashSet 是无序的。
  • LinkedHashSet: LinkedHashSet 是 HashSet 的一种实现,它维护元素的插入顺序。
  • TreeSet: TreeSet 按照元素的自然顺序或创建时提供的自定义比较器确定的排序顺序存储元素。

131.Java 中的 HashSet 类是什么,它如何存储元素?

HashSet 类实现 Java 集合框架中的 Set 接口,是 HashSet 类的成员。与重复值不同,它存储不同元素的集合。在此实现中,使用哈希函数将每个元素映射到数组中的索引,并使用该索引快速访问元素。它根据输入元素为数组中的元素生成索引,并根据该索引存储元素。假设哈希函数在存储桶之间适当地分配元素,则 HashSet 类为基本操作(添加、删除、包含和大小)提供恒定时间性能。

132. Java 集合框架中的 LinkedHashSet 是什么?

LinkedHashSet 是 Hashset 的有序版本,由所有元素的双向链接列表维护。当需要迭代顺序时,它非常有用。在 LinkedHashSet 中进行迭代时,元素将按照插入的顺序返回。

句法: 

LinkedHashSet<E> hs = new LinkedHashSet<E>();

例子:

Java
import java.io.*;
import java.util.*;

// Driver Class
class GFG {
    // Main Function
    public static void main(String[] args) {
        // LinkedHashSet declared
        LinkedHashSet<Integer> hs = new LinkedHashSet<Integer>();
        // Add elements in HashSet
        hs.add(1);
        hs.add(2);
        hs.add(5);
        hs.add(3);
        // Print values
        System.out.println("Values:" + hs);
    }
}

输出

Values:[1, 2, 5, 3]

133.Java 中的 Map 接口是什么?

Java 中的 Map 接口-660

Map 接口存在于 Java 集合中,可与 Java.util 包一起使用。Map 接口用于以键值形式映射值。Map 包含所有唯一键。此外,它还提供与之相关的方法,如 containsKey()、contains value() 等。 

Map集合中有多种类型的Map,如下所述:

  1. SortedMap
  2. TreeMap
  3. HashMap
  4. LinkedHashMap

134. 解释 Java 中的树形图

TreeMap 是一种以键值对形式存储数据的映射。它使用红黑树实现。TreeMap 的特点是:

  1. 它仅包含唯一元素。
  2. 它不能有一个 NULL 键 
  3. 它可以有多个 NULL 值。
  4. 它是非同步的。
  5. 它保持升序。

135.什么是EnumSet?

EnumSet 是 Set 接口的专门实现,用于枚举类型。EnumSet 的一些功能如下:

  1. 它是非同步的。
  2. 比HashSet更快。
  3. EnumSet 中的所有元素必须来自单一枚举类型。
  4. 它不允许空对象,并且会抛出NullPointerException异常。
  5. 它使用故障安全迭代器。

句法:

public abstract class EnumSet<E extends Enum<E>> 

参数: E指定元素。

136.什么是BlockingQueue?

BlockingQueue-768

阻塞队列是支持在检索和移除元素时等待队列变为非空的操作,以及在添加元素时等待队列中的空间可用操作的队列。

句法:

public interface BlockingQueue<E> extends Queue<E>

参数: E 是 Collection 中存储的元素类型

137.Java 中的 ConcurrentHashMap 是什么,你实现了它吗?

ConcurrentHashMap是使用Hashtable实现的。

句法:

public class ConcurrentHashMap<K, ​V> 
extends AbstractMap<K, ​V> 
implements ConcurrentMap<K, ​V>, Serializable

参数:K 是键对象类型,V 是值对象类型

138.可以使用任何类作为 Map 的键吗?

是的,如果它遵循下面提到的某些预定义规则,我们就可以将其用作 Map Key:

  1. 重写 equals() 方法的类也必须重写 hashCode() 方法
  2. concurrentHashMap 类是线程安全的。
  3. ConcurrentHashMap的默认并发级别是16。
  4. 无法在 ConcurrentHashMap 中插入空对象作为键或值。

139. 什么是迭代器?

Java 中的迭代器-768

Iterator 接口提供了在 Java 中迭代任何 Collection 的方法。Iterator 是 Java Collections Framework 中 Enumeration 的替代品。它可以使用 _iterator()_ 方法从 Collection 中获取迭代器实例。它还允许调用者在迭代过程中从底层集合中删除元素。

140. 什么是枚举?

枚举是一种用户定义的数据类型。它主要用于为整数常量分配名称,这些名称使程序易于阅读和维护。枚举的主要目的是定义用户定义的数据类型。

例子:

// A simple enum example where enum is declared 
// outside any class (Note enum keyword instead of 
// class keyword) 
enum Color 
{ 
    RED, GREEN, BLUE; 
}

141. Collection 和 Collections 有什么区别?

收藏

收藏

该集合是一个接口。

集合是一个类。

它提供了数据结构的标准功能。

就是对集合元素进行排序和同步。

它提供了可用于数据结构的方法。

它提供了可用于各种操作的静态方法。

142. 区分 Java 中的 Array 和 ArrayList。

大批

数组列表

单维或多维 

单维 

用于迭代的 for 和 for each

这里使用迭代器来遍历 riverArrayList 

length 关键字返回数组的大小。 

size() 方法用于计算 ArrayList 的大小。

该数组具有固定大小。

ArrayList 的大小是动态的,可以根据需要增加或减少。

正如上面我们看到的固定大小那样,它的速度更快

由于其动态特性,它相对较慢 

原始数据类型可以直接存储在不太可能的对象中。

原始数据类型不会直接添加到不太可能的数组中,而是借助自动装箱和拆箱间接添加

它们不能在这里添加,因此类型不安全。

它们可以添加到这里从而使ArrayList类型安全。 

赋值运算符仅用于

这里使用了一种称为 add() 方法的特殊方法  

143.Java中Array和Collection有什么区别?

大批

收藏

Java 中的数组具有固定的大小。                                        

Java 中的集合具有动态大小。

在数组中,元素存储在连续的内存位置。 

在集合中,元素不一定存储在连续的内存位置。

对象和原始数据类型可以存储在数组中。

我们只能将对象存储在集合中。

需要手动操作来调整数组大小。

集合中的大小调整是自动处理的。

该数组具有操作的基本方法。

集合具有先进的操作和迭代方法。

数组从 Java 开始就有。

集合是在 Java 1.2 中引入的。

144.ArrayList和LinkedList的区别。

数组列表

链表

ArrayList 被实现为可扩展数组。

LinkedList 是作为双向链表实现的。

在ArrayList中,元素存储在连续的内存位置 

LinkedList 元素存储在不连续的内存位置,因为每个元素都有对下一个和前一个元素的引用。

ArrayLists 的随机访问速度更快。

LinkedLists 的插入和删除操作速度更快

ArrayLists 的内存效率更高。 

LinkedList 内存效率较低

ArrayLists 由于维持数组大小而使用更多内存。              

LinkedList 使用较少的内存,因为它仅引用元素

ArrayList 中的搜索操作更快。

LinkedList 中的搜索操作较慢

145.区分Java中的ArrayList和Vector。

数组列表

向量

ArrayList实现为一个可调整大小的数组。

Vector实现为一个同步的、可调整大小的数组。

ArrayList 不同步。 

该向量是同步的。

ArrayLists 对于非并发操作来说速度更快。

由于增加了同步开销,Vector 对于非并发操作来说速度较慢。

ArrayLists 是在 Java 1.2 中引入的。

Vector 是在 JDK 1.0 中引入的。

建议在单线程环境中使用。

建议在多线程环境中使用向量。

ArrayLists的默认初始容量为10。

在 Vectors 中,默认的初始容量为 10,但默认增量是其大小的两倍。

ArrayList性能高。

矢量性能低下。

146.Iterator和ListIterator有什么区别?

迭代器

列表迭代器

只能向前遍历 Collection 中的元素。                                          

可以正向和反向遍历 Collection 中的元素。

用于遍历Map、List、Set。

只能遍历List,不能遍历另外两个。

无法使用 Iterator 获取索引

它具有 nextIndex() 和 previousIndex() 等方法,可以在遍历 List 时随时获取元素的索引。

无法修改或替换 Collection 中的元素

可以借助 set(E e) 修改或替换元素

无法添加元素,并且还会抛出 ConcurrentModificationException。

可以随时轻松地将元素添加到集合中。

Iterator 的某些方法是 next()、remove() 和 hasNext()。

ListIterator 的某些方法是 next()、previous()、hasNext()、hasPrevious() 和 add(E e)。

147.区分HashMap和HashTable。

哈希表

哈希表

HashMap 未同步

HashTable 是同步的

一个键可以是 NULL 值

不允许 NULL 值

迭代器用于遍历HashMap。

Iterator 和 Enumertar 都可以使用

HashMap 更快。

与 HashMap 相比,HashTable 速度较慢。

148. 迭代器 (Iterator) 和枚举 (Enumeration) 有什么区别?

迭代器

枚举

迭代器可以遍历遗留元素以及非遗留元素。

枚举只能遍历遗留元素。

迭代器是快速失败的。

枚举不是快速失败的。

迭代器比较慢。

枚举速度更快。

Iterator 在遍历集合时可以执行删除操作。

枚举只能对集合执行遍历操作。

149. Comparable 和 Comparator 有什么区别?

可比

比较器

该接口存在于 java.lang 包中。

该接口存在于 java.util 包中。

提供compareTo()方法对元素进行排序。

提供compare()方法对元素进行排序。

它提供单一排序序列。

它提供了多种排序序列。

排序的逻辑必须与要排序的对象属于同一类。

排序的逻辑应该放在单独的类中,根据对象的不同属性编写不同的排序。

方法按照固定的排序顺序对数据进行排序。

方法根据自定义的排序顺序对数据进行排序。

它会影响原来的课程。

它不会影响原来的课程。

在 API 中经常由日历、包装类、日期和字符串实现。

它用于对第三方类的实例进行排序。

150.Set和Map有什么区别?

地图

Set 接口是使用 java.util 包实现的。

该地图是使用java.util包实现的。

可以扩展采集接口。

它没有扩展收集接口。

它不允许重复的值。

它允许重复的值。

该集合只能对一个空值进行排序。

该地图可以对多个空值进行排序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2046086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【详细】linux 打包QT程序

【详细】linux 打包QT程序 一. 安装linuxdeployqt1.1 下载linuxdeployqt源码并修改如下 二. 安装patchelf三. 打包appimage四. 打包成 Debian包4.1 control文件内容4.2 postinst文件内容4.3 postrm文件内容4.4 打包命令4.4 安装命令4.5 卸载命令 一. 安装linuxdeployqt 下载地…

【Redis】Redis 数据类型与结构—(二)

Redis 数据类型与结构 一、值的数据类型二、键值对数据结构三、集合数据操作效率 一、值的数据类型 Redis “快”取决于两方面&#xff0c;一方面&#xff0c;它是内存数据库&#xff0c;另一方面&#xff0c;则是高效的数据结构。 Redis 键值对中值的数据类型&#xff0c;也…

被极氪“背刺”新能源汽车车主,你可以说不

文 魏强 导语&#xff1a;谁也改变不了不断被“背刺”的命运。 8月13日晚&#xff0c;极氪召开发布会主推两款改款车——2025款极氪007升级了第二代金砖电池&#xff08;磷酸铁锂&#xff09;、标配了激光雷达和两颗Orin X芯片、全系降价2-3万元。2025款极氪001智驾芯片从Mob…

Artifactory集成LDAP示例

LDAP在企业软件身份认证中起到了非常关键的作用&#xff0c;给企业内用户带来了非常多的便利&#xff0c;JFrog 平台支持针对开箱即用的 LDAP 服务器对用户进行身份验证。下面我们一起看下Artifactory如何集成LDAP&#xff0c;本示例以OpenLDAP为例。 1.快速安装OpenLDAP doc…

SqlSugar详解-国产ORM框架

ORM (Object-Relational Mapping) 概念 ORM 是一种程序技术&#xff0c;用于将关系型数据库中的数据映射到对象上。 主要目的是简化数据库操作&#xff0c;使得开发人员可以像操作对象一样来操作数据库。 原理 数据表与类的映射&#xff1a;数据库中的表对应为类。 记录与对象…

灵办AI助手Chrome插件全面评测:PC Web端的智能办公利器

探索灵办AI助手在Mac OS上的高效表现&#xff0c;支持多款主流浏览器&#xff0c;助你轻松应对办公挑战 文章目录 探索灵办AI助手在Mac OS上的高效表现&#xff0c;支持多款主流浏览器&#xff0c;助你轻松应对办公挑战摘要引言开发环境介绍核心功能评测1. 网页翻译与双语对照 …

【祖孙询问】

问题 代码 #include <bits/stdc.h> using namespace std; const int N 4e410; vector<int> edge[N]; int p[N][20], d[N]; void dfs(int from, int u) {for(auto to : edge[u]){if(to from) continue;d[to] d[u] 1;p[to][0] u;dfs(u, to);}} void init() {fo…

mysql主从同步遇到的问题

1&#xff0c;主库data文件复制到从库&#xff0c;之后主库要同步的实例data一定不要在修改&#xff1b; 1.1&#xff0c;修改之后就要重新覆盖一遍 2&#xff0c;如果状态不对&#xff1a;一定要查看日志&#xff1b;比如slave_io_state是空时&#xff0c;需要查看日志 2.1&a…

使用百度文心智能体创建AI旅游助手

百度文心智能体平台为你开启。百度文心智能体平台&#xff0c;创建属于自己的智能体应用。百度文心智能体平台是百度旗下的智能AI平台&#xff0c;集成了先进的自然语言处理技术和人工智能技术&#xff0c;可以用来创建属于自己的智能体应用&#xff0c;访问官网链接&#xff1…

查看电脑连接过的wifi密码

netsh wlan show profiles netsh wlan show profile name"8821" keyclear

用Python实现9大回归算法详解——01. 线形回归算法

1. 线性回归的基本概念 线性回归是一种最基本的监督学习算法&#xff0c;用于预测因变量&#xff08;目标变量&#xff09;和一个或多个自变量&#xff08;特征变量&#xff09;之间的关系。线性回归假设因变量与自变量之间的关系是线性的&#xff0c;即可以用以下形式的线性方…

写一个githubDemo

1.List组件 <template><div class"container"><!-- 展示用户列表 --><div class"row"><divv-show"info.users.length"v-for"(item, index) in info.users":key"item.id"><div class"…

使用Python对知识文本进行分块

使用大型语言模型时&#xff0c;切勿忽略文本分块的重要性&#xff0c;其对处理结果的好坏有重大影响。接下来介绍常用的一些文本分块方法。1.1 一般的文本分块方法 如果不借助任何包&#xff0c;直接按限制长度切分方案。 text " 我是一个名为 chatGLm3-68 的人工智能助…

wps云字库字体下载到电脑

下拉字体菜单栏--->查看更多云字体 进入后 云字库里的字体&#xff0c;都只能在wps在线使用。 但是&#xff0c;要想下载到自己的电脑上&#xff0c;安装到电脑系统字体库中&#xff0c;WIN7的字体安装系统路径&#xff1a;C:\Windows\Fonts&#xff0c;以供电脑软件adobe …

Spring IoCDI(上)--初识

1. IoC & DI ⼊⻔ 1.1 Spring 是什么 通过前⾯的学习, 我们知道了Spring是⼀个开源框架, 他让我们的开发更加简单. 他⽀持⼴泛的应⽤场 景, 有着活跃⽽庞⼤的社区, 我们⽤⼀句更具体的话来概括Spring, 那就是: Spring 是包含了众多⼯具⽅法的 IoC 容器 1.1.1 什么是容器…

C#委托(入门)

1、语法 步骤 ①定义一个委托类型, 如Help ②委托类型实例化为委托实例 ③定义函数(与委托类型相匹配的) ④将函数交给委托实例使用 示例一 //方法一 void MyFunc1() {Console.WriteLine("Hello"); }//方法二 void MyFunc2() {Console.WriteLine("World&…

STM32总线和时钟树(速记版)

一、存储器结构 1.1 STM32内存结构 型号说明 以STM32F103RBT6这个型号的芯片为例&#xff0c;该型号的组成为7个部分&#xff0c;其命名规则如下&#xff1a; ST 是公司名&#xff0c;意法半导体。M 代表Cortex-M内核。32 代表32位微控制器。 F103 是芯片系列。 R 代表引脚数…

算法基础知识——11种距离度量

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 前言&#xff1a;距离的作用 数据聚类&#xff1a;距离度量在聚类算法&#xff08;如K-means、层次聚类&#xff09;中用于衡量数据点之间的相似性或差异性&#xff0c;帮助确定聚类的中心和边界…

10款开源管理工具大比拼:哪个最适合您的团队?

国内外主流的 10 款开源项目管理系统对比&#xff1a;PingCode、Worktile、Gitee、开源中国 (OSChina)、禅道 (ZenTao)、OpenProject、Redmine、Leantime、MeisterTask、Freedcamp。 在选择合适的开源项目管理工具时&#xff0c;你是否感到困惑和不安&#xff1f;市场上众多的选…

Python | Leetcode Python题解之第338题比特位计数

题目&#xff1a; 题解&#xff1a; class Solution:def countBits(self, n: int) -> List[int]:bits [0]for i in range(1, n 1):bits.append(bits[i & (i - 1)] 1)return bits