皮皮网

【dubbo中spi的源码】【ofoapp源码】【dp 源码】treeset 源码

2024-11-20 11:44:50 来源:编程猫源码编辑器界面介绍

1.面试官:从源码分析一下TreeSet(基于jdk1.8)
2.java代码实现将100分拆成四个整数之和,一共有多少种拆法?

treeset 源码

面试官:从源码分析一下TreeSet(基于jdk1.8)

       面试官可能会询问关于TreeSet(基于JDK1.8)的源码分析,实际上,TreeSet与HashSet类似,都利用了TreeMap底层的红黑树结构。主要特性包括:

       1. TreeSet是dubbo中spi的源码基于TreeMap的NavigableSet实现,元素存储在TreeMap的ofoapp源码key中,value为一个常量对象。

       2. 不是直接基于TreeMap,而是NavigableMap,因为TreeMap本身就实现了这个接口。

       3. 对于内存节省的疑问,TreeSet在add方法中使用PRESENT对象避免了将null作为value可能导致的逻辑冲突。添加重复元素时,dp 源码PRESENT确保了插入状态的区分。

       4. 构造函数提供了多样化的选项,允许自定义比较器和排序器,基本继承自HashSet的imworks源码特性。

       5. 除了基本的增删操作,TreeSet还提供了如返回子集、头部尾部元素、区间查找等方法。白鲸源码

       总结来说,TreeSet在排序上优于HashSet,但插入和查找操作由于树的结构会更复杂,不适用于对速度有极高要求的场景。如果不需要排序,HashSet是更好的选择。

       感谢您的关注,关于TreeSet的源码解析就介绍到这里。

java代码实现将分拆成四个整数之和,一共有多少种拆法?

       如果没有负整数,一共有 种拆法。

       源码:

       import java.io.FileWriter;

       import java.io.IOException;

       import java.util.Arrays;

       import java.util.Set;

       import java.util.TreeSet;

       public class Main {

       public final static int Sum = ;

       static Set<String> Combinations = new TreeSet<>();

       public static void main(String[] args) throws IOException {

       for (int i1 = 0; i1 <= Sum; i1++) {

       for (int i2 = 0; i2 <= Sum; i2++) {

       for (int i3 = 0; i3 <= Sum; i3++) {

       for (int i4 = 0; i4 <= Sum; i4++) {

       String s = GetString(new int[] { i1, i2, i3, i4});

       if (CheckNumbers(i1, i2, i3, i4)) {

       Combinations.add(s);

       }

       }

       }

       }

       }

       System.out.println(Combinations);

       System.out.println(Combinations.size());

       FileWriter writer = new FileWriter("results.json");

       writer.write(Combinations.toString());

       writer.flush();

       writer.close();

       }

       public static String GetString(int[] numbers) {

       sort(numbers, 0, 3);

       return Arrays.toString(numbers);

       }

       public static void sort(int[] arr,int begin,int end) {

       int a = begin;

       int b = end;

       if (a >= b) return;

       int x = arr[a];

       while (a < b) {

       while (a < b && arr[b] >= x) b--;

       if (a < b) {

       arr[a] = arr[b];

       a++;

       }

       while (a < b && arr[a] <= x) a++;

       if (a < b) {

       arr[b] = arr[a];

       b--;

       }

       }

       arr[a] = x;

       sort(arr,begin,a-1);

       sort(arr,a+1,end);

       }

       public static boolean CheckNumbers(int i1, int i2, int i3, int i4) {

       return (i1 + i2 + i3 + i4) == Sum;

       }

       }