关于阅读程序时遇到的一些问题和总结

本文深入探讨Java中的关键概念,包括数组交换、冒泡排序、反射机制、随机数生成、BigDecimal处理、集合类的最佳实践等。此外,还介绍了注释快捷键、Integer与String的封装方法、优先使用集合接口,以及并发与多线程的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Swap in JAVA, 不是想象中的简单。

   // swap: interchange inside array
   static void swap(int[] a, int i, int j) {
      int t = a[i];
      a[i] = a[j];
      a[j] = t;
   }

参考:
https://blog.youkuaiyun.com/dadoneo/article/details/6577976
http://www.cs.utsa.edu/~wagner/CS2213/swap/swap.html

2.冒泡排序中的越界问题。

static void bubble_sort(int[] unsorted)
{
	for (int i = 0; i < unsorted.Length; i++)
	{
		for (int i = 0 ; j < unsorted.Length - i; j++)
		{
			if (unsorted[j] > unsorted[j+1])
			{
				int temp = unsorted[j];
				unsorted[j] = unsorted[j+1];
				unsorted[j+1] = temp;
			}
		}
	}
}

参考:
http://www.cnblogs.com/kkun/archive/2011/11/23/2260280.html

3.ob.getClass().getName();//java的getClass()函数

JAVA反射机制
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
参考:
https://blog.youkuaiyun.com/elfylin/article/details/7422610

4.java Random.nextInt()方法

该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。
参考:
https://www.cnblogs.com/mr-wuxiansheng/p/6891693.html

5.Java BigDecimal详解
(1)商业计算使用BigDecimal。 (2)尽量使用参数类型为String的构造函数。

6.eclipse中注释多行的快捷键
(1)“//”类注释:按住Ctrl+/快捷键;再次按住Ctrl+/快捷键打开注释。
(2)“/**/”类注释:Ctrl+Shift+/添加注释;用Ctrl+Shift+\取消注释。

7.Integer和String封装的方法
(1)Integer.toString(int number)和Integer.parseInt(String number):Integer的两个方法,分别是将数字转换成字符串和将字符串装换成整型(范围内)。
(2)String中charAt():charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。

8.优先使用集合类中的接口 Collection, List, Set 和 Map。
(1)例如:List x = new LinkedList();
当然,也可以决定将 x 作为一个 LinkedList 使用(而不是一个普通的 List),并用 x 负载准确的类型信息。使用接口的好处就是一旦决定改变自己的实施细节,要做的全部事情就是在创建的时候改变它,就象下面这样:
List x = new ArrayList();
其余代码可以保持原封不动。
(2)对于Lists的相关建议:
ArrayList作为一个常规用途的对象容器使用,用于替换原先的 Vector。ArrayList随机访问速度快,LinkedList插入和删除操作效率高。
(3)对于Sets的相关建议:
set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。
(4)对于Maps的相关建议:
HashMap基于一个散列表实现(用它代替 Hashtable)。针对“键-值”对的插入和检索,这种形式具有最稳定的性能。TreeMap 在一个“红-黑”树的基础上实现。查看键或者“键-值”对时,它们会按固定的顺序排列。TreeMap 最大的好处就是我们得到的是已排好序的结果。
HashMap:适用于在Map中插入、删除和定位元素。
Treemap:适用于按自然顺序或自定义顺序遍历键(key)。
(5)java自带的排序和搜索:
Java 1.2 添加了自己的一套实用工具,可用来对数组或列表进行排列和搜索。这些工具都属于两个新类的“静态”方法。这两个类分别是用于排序和搜索数组的 Arrays,以及用于排序和搜索列表的 Collections。
Arrays 类为所有基本数据类型的数组提供了一个过载的 sort()和 binarySearch(),它们亦可用于 String 和Object。
用于排序和搜索列表的静态方法包含在类Collections 中,但它们拥有与 Arrays 中差不多的签名: sort(List)用于对一个实现了 Comparable 的对象列表进行排序; binarySearch(List,Object)用于查找列表中的某个对象; sort(List,Comparator)利用一个“比较器”对一个列表进行排序;而 binarySearch(List,Object,Comparator)则用于查找那个列表中的一个对象。
参考:
https://blog.youkuaiyun.com/u012546203/article/details/62043423
https://www.jb51.net/article/32652.htm

9.Arrays类中的asList方法
(1)该方法不适用于基本数据类型(byte,short,int,long,float,double,boolean)
(2)该方法将数组与列表链接起来,当更新其中之一时,另一个自动更新
(3)不支持add和remove方法
参考:
https://www.cnblogs.com/shanheyongmu/p/6364320.html

10.并发与多线程相关
(1)Runnable接口。
Java开发中,我们实现多线程,有两种方式, 一种是继承Thread类,一种是实现Runnable接口。Runnable只是一个接口,它里面只有一个run()方法,没有start()方法, 所以,即使实现了Runnable接口,那也无法启动线程,必须依托其他类。
而Thread类,有一个构造方法,参数是Runnable对象,也就是说可以通过Thread类来启动Runnable实现的多线程。 所以,实现Runnable接口后,需要使用Thread类来启动。

总结:只是实现Runnable接口,并不能启动或者说实现一个线程。Runnable接口,并不能代表一个线程。Runnable接口和线程是两个不同的概念!
换句话说,一个类,实现Runnable接口,这个类可以做很多事情,不仅仅只被用于线程,也可以用于其他功能!
参考:
https://blog.youkuaiyun.com/zxw136511485/article/details/53032658

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值