java基础知识刷题

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java基础知识刷题

在学习Java语言时,除了理论知识的学习,设计各种题目也是必不可少的一部分。这些习题既有基础知识的练习也有实践操作的经验积累,是Java学习过程中不可或缺的部分。接下来我们就来看下Java 基础知识刷题的相关内容。

1.计算一个整数的二进制表示中有多少个1

这个题目主要考察位运算的知识。可以通过左移运算、右移运算和按位与运算来实现,代码如下:

```

public static int get1Counts(int n) {

int count = 0;

while (n != 0) {

count++;

n &= (n - 1);

}

return count;

}

```

2.统计一个字符串中出现次数最多的字符

这个题目需要用到哈希表,核心思路是记录每个字符出现的次数,最终找到出现次数最多的字符。代码如下:

```

public static char getMaxCountChar(String str) {

int maxLength = 0;

char maxCountChar = ' ';

Map map = new HashMap<>();

for (int i = 0; i < str.length(); i++) {

char c = str.charAt(i);

int count = map.getOrDefault(c, 0) + 1;

map.put(c, count);

if (count > maxLength) {

maxLength = count;

maxCountChar = c;

}

}

return maxCountChar;

}

```

3.两个有序数组合并成一个有序数组

这个题目主要考察数组操作和指针运算。需要额外开辟一段空间用于存储合并后的有序数组。代码如下:

```

public static int[] merge(int[] nums1, int[] nums2) { int[] merged = new int[nums1.length + nums2.length]; int i = 0, j = 0, k = 0;

while (i < nums1.length && j < nums2.length) {

if (nums1[i] < nums2[j]) {

merged[k++] = nums1[i++];

} else {

merged[k++] = nums2[j++];

}

}

while (i < nums1.length) {

merged[k++] = nums1[i++];

}

while (j < nums2.length) {

merged[k++] = nums2[j++];

}

return merged;

}

```

4.实现一个单例模式

单例模式是一种常用的设计模式,可以确保一个类只有一个实例,并提供一个全局访问点。实现方式有两种:饿汉式和懒汉式。饿汉式

在类被初始化时就创建实例,而懒汉式在首次调用时才创建实例。饿

汉式的实现代码如下:

```

public class Singleton {

private static final Singleton INSTANCE = new Singleton();

private Singleton() {}

public static Singleton getInstance() {

return INSTANCE;

}

}

```

懒汉式的实现代码如下:

```

public class Singleton {

private static Singleton INSTANCE = null;

private Singleton() {}

public static synchronized Singleton getInstance() { if (INSTANCE == null) {

INSTANCE = new Singleton();

}

return INSTANCE;

}

}

```

5.删除链表的倒数第N个节点

这个题目需要用到链表的基本操作,包括链表的遍历和节点的删除。核心思路是快慢指针,让快指针先移动N个节点,然后快慢指针一起移动,当快指针到达链表末尾时,慢指针就指向了倒数第N个节点的前一个节点。代码如下:

```

public static ListNode removeNthFromEnd(ListNode head, int n) {

ListNode dummy = new ListNode(0);

dummy.next = head;

ListNode slow = dummy, fast = dummy;

for (int i = 0; i < n; i++) {

fast = fast.next;

}

while (fast.next != null) { slow = slow.next;

fast = fast.next;

}

slow.next = slow.next.next; return dummy.next;

}

public static class ListNode { int val;

ListNode next;

ListNode(int x) { val = x; } }

相关文档
最新文档