我刚刚学习JAXB(用于XML绑定的Java体系结构).通过一些消息来源,我想到了一个疑问JAXBElement.
Oracle文档说:
When XML element information can not be inferred by the derived Java representation of the XML content, a JAXBElement object is provided. This object has methods for getting and setting the object name and object value. 链接在这里
这是否意味着JAXBElement在Schema定义的数据类型和Java数据类型之间没有直接映射时需要使用?
此外,在下面列出的一个代码示例中.我从这里跟随:
ObjectFactory factory = new ObjectFactory();
UserT user = factory.createUserT();
user.setUserName("Sanaulla");
ItemT item = factory.createItemT();
item.setItemName("Seagate External HDD");
item.setPurchasedOn("August 24, 2010");
item.setAmount(new BigDecimal("6776.5"));
ItemListT itemList = factory.createItemListT();
itemList.getItem().add(item);
ExpenseT expense = factory.createExpenseT();// we get …Run Code Online (Sandbox Code Playgroud) 根据著名本书深入浅出Java页面661:
" Garbage Collector doesn't go inside String pool."
在阅读了关于SO的类似问题后,我发现了如下混合答案:
我的问题是:
如何在Java 6及之前收集字符串文字垃圾?
因为在Java 7中,将在堆上创建字符串文字,与Java 6相比,Java 7中字符串文字的垃圾收集将如何不同?
据Oracle称,StackOverflowError是:
在发生堆栈溢出时抛出,因为应用程序过于严重.
我知道递归是什么,通常递归函数,如果没有正确终止,会导致StackOverflowError.为了检查StackOverflowError抛出之前发生的递归调用的数量,我写了这段代码:
package ErrorCases;
public class StackOverFlowError {
static int i=0;
void a()
{
//System.out.println("called "+(++i));
try{
++i;
a();
}catch(Error e)
{
System.out.println(e.getClass());
System.out.println(i);
}
}
public static void main(String[] args) {
new StackOverFlowError().a();
}
}
Run Code Online (Sandbox Code Playgroud)
在JVM抛出StackOverflowError之前,i给出递归调用计数的值a().每次运行
的价值i都不同,如:
output 1: class java.lang.StackOverflowError
10466
Output 2: class java.lang.StackOverflowError
10470
Run Code Online (Sandbox Code Playgroud)
我的疑问是?
在JVM抛出之前递归有多深
StackOverflowError?
一旦StackOverflowError投掷,我们可以恢复吗?
考虑的情况下,Merge Sort对一个int Array含有n元素,我们需要大小的附加阵列n,以便执行merges.We丢弃到底附加阵列though.So归并排序的空间复杂度出来是O(n).但是如果你看看递归mergeSort过程,在每次递归调用时都会将mergeSort(something)一个堆栈帧添加到堆栈中.它确实占用了一些空间,对吧?
public static void mergeSort(int[] a,int low,int high)
{
if(low<high)
{
int mid=(low+high)/2;
mergeSort(a,low,mid);
mergeSort(a,mid+1,high);
merge(a,mid,low,high);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
int a[]=new int [n];),那该怎么办呢.那么在计算空间复杂度时会考虑它吗?根据KathySierra的SCJP学习指南:
必须对字符串进行修改时,应使用java.lang.StringBuffer和java.lang.StringBuilder类.正如我们所讨论的,String对象是不可变的,所以如果你选择对String对象进行大量的操作,你最终会在String池中放弃很多被抛弃的String对象
为了清除这一点,我在这里完成了String类和StringBuilder 源代码.
String的simplfied代码如下所示:
public final class String(){
private final char [] value; //Final helps in immutability, I guess.
public String (String original){
value = original.value;
}
}
Run Code Online (Sandbox Code Playgroud)
和StringBuilder的简化版本是这样的:
public final class StringBuilder{
char [] value;
public StringBuilder(String str) {
value = new Char[(str.length() + 16)]; // 16 here is implementation dependent.
append(str);
}
public StringBuilder append(String str){
//Add 'str' characters in value array if its size allows,
else
// Create new array of size newCapacity …Run Code Online (Sandbox Code Playgroud)